首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Mongo的ORM框架的学习Morphia(十二) morphia自定义转换器的施用

2012-08-28 
Mongo的ORM框架的学习Morphia(十二) morphia自定义转换器的使用??? 在Morphia中为什么各种数据库可以自由

Mongo的ORM框架的学习Morphia(十二) morphia自定义转换器的使用

??? 在Morphia中为什么各种数据库可以自由转换为Java对象呢?主要采用转换器机制实现实现字符串和Java对象之间的转换,转换器类需要实现TypeConvertor,如下:

?

public  class FooConverter extends TypeConverter implements SimpleValueConverter 

?

下面讲解转换器的使用:

package com.easyway.mongodb.morphia.converter;import com.google.code.morphia.annotations.Entity;import com.google.code.morphia.annotations.Id;/** *  * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-4 * @author  * @version 1.0 */@Entity(noClassnameStored=false,value="animail")public class Animail {@Idprivate String id;public String getId() {return id;}public void setId(String id) {this.id = id;}}

?

?

package com.easyway.mongodb.morphia.converter;import java.util.HashMap;import java.util.Map;import com.google.code.morphia.annotations.Embedded;import com.google.code.morphia.annotations.Entity;/** *  * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-4 * @author  * @version 1.0 */@Entity(noClassnameStored=false,value="animail")public class Dog extends Animail{private static final long serialVersionUID = 1L;@EmbeddedMap<String, Foo> foo = new HashMap<String, Foo>();}

?

?

package com.easyway.mongodb.morphia.converter;import net.sf.json.JSONObject;/** *  * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-4 * @author  * @version 1.0 */public  class Foo {private String name;private String email;Foo(){}public Foo(String name,String email) {this.name = name;this.email=email;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return JSONObject.fromObject(this).toString();}}

?

转换器类如下:

package com.easyway.mongodb.morphia.converter;import net.sf.json.JSONObject;import com.google.code.morphia.converters.SimpleValueConverter;import com.google.code.morphia.converters.TypeConverter;import com.google.code.morphia.mapping.MappedField;import com.google.code.morphia.mapping.MappingException;/** *  * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-4 * @author  * @version 1.0 */public  class FooConverter extends TypeConverter implements SimpleValueConverter  {public boolean done;public FooConverter() {super(Foo.class);}/** *  */@Overridepublic Object decode(Class targetClass, Object fromDBObject, MappedField mf)throws MappingException {if(fromDBObject==null){return null;}JSONObject jsonObject=JSONObject.fromObject(fromDBObject);return JSONObject.toBean(jsonObject, targetClass);}@Overridepublic Object encode(Object value, MappedField optionalExtraInfo) {done = true;return JSONObject.fromObject(value).toString();}public boolean didConversion() {return done;}}

?

?

package com.easyway.mongodb.morphia.converter;import java.util.LinkedList;import java.util.List;import com.google.code.morphia.annotations.Embedded;import com.google.code.morphia.annotations.Entity;/** *  * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-4 * @author  * @version 1.0 */@Entity(noClassnameStored=false,value="animail")public class Pig  extends Animail{private static final long serialVersionUID = 1L;@EmbeddedList<Foo> foo = new LinkedList<Foo>();}

?

?

测试如下:

package com.easyway.mongodb.morphia.converter;import java.net.UnknownHostException;import com.google.code.morphia.AdvancedDatastore;import com.google.code.morphia.Datastore;import com.google.code.morphia.Morphia;import com.mongodb.DB;import com.mongodb.Mongo;import com.mongodb.MongoException;/** *  * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-4 * @author  * @version 1.0 */public class FooConverterApp {            public static void main(String[] args) throws UnknownHostException, MongoException {        Morphia morphia = new Morphia();    Mongo mongo = new Mongo("localhost");        DB db= mongo.getDB("morphia_test");        Datastore ds = morphia.createDatastore(mongo, db.getName());        AdvancedDatastore ads = (AdvancedDatastore) ds;        morphia.map(Pig.class).map(Dog.class).map(Animail.class);        FooConverter  fc=new FooConverter();        //morphia.getMapper().getConverters().addConverter(fc);    Dog e = new Dog();e.foo.put("bar",new Foo("bar"," a bar"));e.foo.put("big",new Foo("dog","a dog"));ds.save(e);System.out.println(e.foo.get("bar").toString());Pig pig=new Pig();pig.foo.add(new Foo("a","b"));pig.foo.add(new Foo("b","c"));ds.save(pig);}    }

?

热点排行