MongoDB 数据库 Java 版驱动:Morphia的使用

jopen 10年前

Morphia是一个开放源代码的对象关系映射框架,它对MongoDB数据库 java版驱
动进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵MongoDB数据库,也让Java程序员可以从复杂数据库设计中脱离出来,从而将更多的精力投入到业务逻辑中去。Morphia是一个轻量级的类型安全的Java对象to/from MongoDB 库,具有以下特征:

  • 它易于使用,而且非常轻巧,每种类型使用一次反射。
  •  数据存储(DataStore)和 DAO<T,V> 访问抽象,或自己实现... 
  • 使用运行时验证的类型安全(Type-safe)和 Fluent 查询(Query) 支持 
  • 基于注解的行为映射,无XML文件
  •  扩展: Validation(jsr303) ,以及SLF4J日志 
  • 生命周期方法/事件(Lifecycle Method/Event)支持 
  • 可与Guice、Spring和其它DI框架很好整合或协作
  •  很多扩展点(新的注解,转换器,行为映射,日志等) 
  • 不存储Null/Empty值(默认)
  •  GWT支持(实体仅为POJO) - (GWT忽略注释)
  •  允许原始类型、void toObject(DBObject) 或DBObject  fromObject(Object) fromObject的高级映射器


Morphia配合mongoDB就如同Hibernate配合关系型数据库.所以可以认为Morphia在MongoDB的基础上面调用mongoDB的语法.

在java中直接调用Morphia的api会显得比较简单快捷.

 

1.加入mongoDB和Morphia的Jar包.

    //创建连接源        Mongo mongo = null;                try {                    mongo = new Mongo();                } catch (UnknownHostException e) {                    e.printStackTrace();                }                Morphia morphia = new Morphia();                Datastore ds = morphia.createDatastore(mongo, "test");                //查找                for(User user:ds.find(User.class, "password", "admin")){                    System.out.println(user);                }                System.out.println(ds.find(User.class, "password", "admin").get());                        //插入                        User user1 = new User("00018", "hello1", "hello1");                User user2 = new User("00019", "hello2", "hello2");                List<User> list = new ArrayList<>();                list.add(user1);                list.add(user2);                ds.save(list);                    // 修改                Query<User> query =                        ds.createQuery(User.class).field("uid").equal("00013");                UpdateOperations<User> uo =                        ds.createUpdateOperations(User.class).set("password",                                "IDONTKONW").set("userName", "IDONTKONW");                ds.update(query, uo);                                /**                * 删除                *                 */                // ds.delete(User.class, "00018");                Query<User> query = ds.createQuery(User.class).field("userName").contains("t");                ds.delete(query);