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

Mongo的ORM框架的学习Morphia(十一) morphia自定义引语的使用

2012-08-22 
Mongo的ORM框架的学习Morphia(十一) morphia自定义注解的使用???? 在特殊的情况下,定义服务端注解,减少配

Mongo的ORM框架的学习Morphia(十一) morphia自定义注解的使用

???? 在特殊的情况下,定义服务端注解,减少配置。下面代码为注解的使用:

注解类:

package com.easyway.mongodb.morphia.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** *  * @Title: 自定义注释的使用 * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-2 * @author  * @version 1.0 */@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD})public  @interface Lowercase {}

?

?

package com.easyway.mongodb.morphia.annotation;import com.google.code.morphia.annotations.Entity;import com.google.code.morphia.annotations.Id;/** * 用于存储MorphiaInfo的信息 * @Title:  * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-2 * @author  * @version 1.0 */@Entitypublic class MorphiaInfo {private @Id String id;//自定义注释的使用@Lowercaseprivate String morphiaName;private String version;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getMorphiaName() {return morphiaName;}public void setMorphiaName(String morphiaName) {this.morphiaName = morphiaName;}public String getVersion() {return version;}public void setVersion(String version) {this.version = version;}}

?

?

package com.easyway.mongodb.morphia.annotation;import java.util.List;import com.google.code.morphia.EntityInterceptor;import com.google.code.morphia.mapping.MappedClass;import com.google.code.morphia.mapping.MappedField;import com.google.code.morphia.mapping.Mapper;import com.mongodb.DBObject;/** * 使用拦截器机制的使用用于特定的处理 *  * @Title:  * @Description: 实现自定义注释的使用 * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-2 * @author  * @version 1.0 */public class ToLowercaseHelper implements EntityInterceptor {public void postLoad(Object ent, DBObject dbObj, Mapper mapr) {}public void postPersist(Object ent, DBObject dbObj, Mapper mapr) {}/** * 保存的前的拦截 */public void preSave(Object ent, DBObject dbObj, Mapper mapr) {}/** * 加载前的操作 */public void preLoad(Object ent, DBObject dbObj, Mapper mapr) {}/** * 持久化前的处理 * (non-Javadoc) * @see com.google.code.morphia.EntityInterceptor#prePersist(java.lang.Object, com.mongodb.DBObject, com.google.code.morphia.mapping.Mapper) */public void prePersist(Object ent, DBObject dbObj, Mapper mapr) {//获取映射的类MappedClass mc = mapr.getMappedClass(ent);//获取映射的特定注释的类字段List<MappedField> toLowercase = mc.getFieldsAnnotatedWith(Lowercase.class);//针对映射特定的注释类的处理for (MappedField mf : toLowercase) {try {Object fieldValue = mf.getFieldValue(ent);dbObj.put(mf.getNameToStore() + "_lowercase", fieldValue.toString().toLowerCase());} catch (Exception e) {throw new RuntimeException(e);}}}}

?

?

package com.easyway.mongodb.morphia.annotation;import com.google.code.morphia.AdvancedDatastore;import com.google.code.morphia.Datastore;import com.google.code.morphia.Morphia;import com.google.code.morphia.mapping.MappedField;import com.mongodb.DB;import com.mongodb.Mongo;/** *  * @Title: 简单的测试类 * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-3-2 * @author  * @version 1.0 */public class AnnotationApp {public static void main(String[] args)  {try {     String dbName="test";     //创建一个Mongo对象     Mongo mongo = new Mongo("localhost");     //获取Mongo的数据库对象     DB db = mongo.getDB(dbName);     //创建一个Morphia对象     Morphia morphia = new Morphia();     //创建一个Datastore对象用于操作数据     Datastore ds= morphia.createDatastore(mongo, db.getName());     AdvancedDatastore ads = (AdvancedDatastore) ds;     //映射字段添加对应的自定义注释的注册 MappedField.interestingAnnotations.add(Lowercase.class); //映射mapper中添加相关的拦截器 morphia.getMapper().addInterceptor(new ToLowercaseHelper()); //设置映射的类 morphia.map(MorphiaInfo.class);  //保存一个mongo对象 MorphiaInfo u = new MorphiaInfo(); u.setVersion("Morphia V1.0"); u.setMorphiaName("MorphiaName"); ds.save(u);  //查找一个mongo对象MorphiaInfo uScott = ds.find(MorphiaInfo.class).disableValidation().filter("morphiaName_lowercase", u.getMorphiaName().toLowerCase()).get();        System.out.println("uScott="+uScott.getMorphiaName());        } catch (Exception e) {e.printStackTrace();}}}

?

热点排行