MongoDB 数据库 Java 版驱动:Morphia的使用
                 jopen
                 11年前
            
                    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);