Mongodb 的ORM框架 Morphia 之 Datasotre接口

  • Datastore
    • Get 方法
    • Find 方法
    • Save 方法
    • Delete 方法
    • FindAndDelete 方法
    • Update  方法
    • Ensure Indexes and Caps
       Datastore
         Datastore接口为你把Java对象保存到MongoDB或从MongoDB中访问Java对象提供了安全类型的方法。它提供了get/find/save/delete方法为你操作Java
    对象。

     Get方法
        Get方法返回一个实体对象通过@Id。get方法只是find(...)方法的一个精简通过ID访问。他会返回一个实体对象,或者null如果没有找到的话。
        Datastore ds = ...
        Hotel hotel = ds.get(Hotel.calss,  hotelId);

     Find方法    
         find方法只是对Query的一个轻量级的包裹。 作为包裹他将返回一个Query,他将支持Iterable<T>和QueryResults接口。
           
  Datastore ds = ...

 //在循环中使用
 for(Hotel hotel : ds.find(Hotel.class, "stars >", 3))
	  print(hotel);

 //作为一个list返回
 List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).asList();

 //对结果排序
 List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).sort("-stars").asList();

 //返回第一个符合条件的结果,
 Hotel gsHotel = ds.find(Hotel.class, "name", "Grand Sierra").get();

 //same as
 Hotel gsHotel = ds.find(Hotel.class, "name =", "Grand Sierra").get();

          这里是有效的操作符列表["=", "==", "!=", "<>", ">", "<", ">=", "<=", "in", "nin", "all", "size", "exists"]
          如果没有指定操作符默认使用"=",  就像上面的例子,"="和“==”是等价的表示相等,"!="和"<>"是等价的表示不想等。
        Save 方法
            很多方法工作在幕后。本方法直截了当。
        
      
        Datastore ds = ...

        Hotel hotel = new Hotel();

        ds.save(hotel);

          //@Id field is filled in for you (after the save), if you didn't set it.
        ObjectId id = hotel.getId();
   

          Delete方法
              他很好的自我解释,这个方法将会基于一个查询,id或一个实体删除数据项。
              
                 
        Datastore ds = ...
        ds.delete(Hotel.class, "Grand Sierra Resort");
        //use a query
        ds.delete(ds.createQuery(Hotel.class).filter("pendingDelete", true));
       

          FindAndDelete方法
                    在MongoDB中有个潜在功能是以原子方式做一些操作。这个和删除一个实体,并且同时返回要删除的项。FindAndDelete方法讲首先查询要删除的项,
            并且删除。
            
             Update方法
               Updates应用在服务器上并且允许复杂但非常有效的修改。
                假设你要跟踪一个用户的最近登录信息。在任何成功登录你网站的用户都修改时间,但是你不必加载此用户的信息然后在重新保存整个对象信息。相反,你
           可以局部的修改并且执行一个有效的修改。
                
    
       @Entity
       class User
       {
          @Id private ObjectId id;
          private long lastLogin;
          //... other members

         private Query<User> queryToFindMe(){
            return datastore.createQuery(User.class).field(Mapper.ID_KEY).equal(id);
          }

         public void loggedIn(){
           long now = System.currentTimeMillis();
           UpdateOperations<User> ops = datastore.createUpdateOperations(User.class).set("lastLogin", now);
           ds.update(queryToFindMe(), ops);
           lastLogin = now;
          }
        }
       //maybe add example on managing an embedded array of login times
               

            Ensure Indexs and Caps
                      这些方法需要你在已经注册你的实体类到Morphia中后调用。它将异步创建你的索引,和附加到你的collections中。这个将在你每次启动你的应用时
                 都执行一次。
             注意:如果在一个存在的系统中,已经存在了索引和附加到了collections上,将不会在花费任何时间。
                
 
        Morphia m = ...
        Datastore ds = ...

        m.map(MyEntity.class);
        ds.ensureIndexes(); //creates all defined with @Indexed
        ds.ensureCaps(); //creates all collections for @Entity(cap=@CappedAt(...))
             

              英语水平有限,请大侠斧正
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值