文档章节

MorPhia Datastore接口翻译

chencliff
 chencliff
发布于 2015/04/23 13:31
字数 706
阅读 57
收藏 1

#Datastore接口

Datastore接口提供一个类型安全的方法来处理java对象在MongoDB中的存储。他提供的主要方法是:get、find、save、delete。

##Get 方法##

Get方法通过java对象的@Id属性来返回相应的对象。返回结果与带Id条件的find()方法一致。如果未找到,返回null

Datastore ds = ...
Hotel hotel = ds.get(Hotel.class, hotelId);

##Find 方法## find方法是Query方法的轻量级包装。方法返回一个Query,支持Iterable<T> 和 QueryResults 接口

Datastore ds = ...

//use in a loop
for(Hotel hotel : ds.find(Hotel.class, "stars >", 3)) {
	print(hotel);
}

//get back as a list
List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).asList();

//sort the results
List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).sort("-stars").asList();

//get the first matching hotel, by querying with a limit(1)
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 Methods## 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 Methods## 删除方法能够自动根据query、id或者entity来删除对应的数据

Datastore ds = ...
ds.delete(Hotel.class, "Grand Sierra Resort");
//use a query
ds.delete(ds.createQuery(Hotel.class).filter("pendingDelete", true));

##FindAndDelete## 原子方式执行find和delete操作,这个方法将找到第一个符合条件的对象,删除并返回它。

Datastore ds = ...
Hotel grandSierra = ds.findAndDelete(Hotel.class, "Grand Sierra Resort");

##Update Methods##

与重新保存整个entity相比,update方法允许一些更负责但更有效的更新操作。

比如,你需要更新用户的最后一次登录的操作。每次用户登录后,你只需要更新一个timestamp,但并不需要将整个User加载并重新保存。你可以进行如下的更新操作。

@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;
   }
}

##确保Indexes和Caps## 这些方法将在使用Morphia注册entities时执行。默认是同步创建index和Capped collections。你可以在程序启动,管理界面或者使用部署脚本来执行。他们能够保证在已有数据的时候在后台创建index。

如果你在程序生命周期里面延迟创建index,你必须确保在存储任何数据之前,创建出capped collections (ensureCaps)。

注:在已有系统上执行这些操作时(这个系统本身存在一些index和capped collections),将不耗费任何时间(同时也不做任何事情)。如果操作的collection不是capped,或者设置不一样,对已有的capped collections不做任务操作,只是在log里面记录一个错误。

Morphia m = ...
Datastore ds = ...

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

© 著作权归作者所有

共有 人打赏支持
chencliff
粉丝 6
博文 2
码字总数 815
作品 0
朝阳
技术主管
morphia中查询时,使用关键字 in 的条件

morphia中查询时,使用关键字 in 的条件 定义一个数字或者list Datastore ds = super.getDs(); Query<Province> query = ds.createQuery(Province.class); List<Integer> idList = new Array......

风中帆
2015/01/27
0
0
NoSQL 之 Morphia 操作 MongoDB

上两篇文章:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html 介绍到了在MongoDB的控制台完成MongoDB的数据操......

ibm_hoojo
2012/02/17
0
0
使用 Morphia 和 MongoDB 实现域模型持久性

简介: MongoDB 是面向文档的开源数据库,Morphia 是面向 MongoDB 的类型安全的对象映射库。本文解释了在文档和对象之间进行映射的好处,并演示了如何使用 Morphia 来实现这个功能。然后演示...

IBMdW
2011/06/14
1K
2
PlayMorphia

PlayMorphia是基于Morphia库的PlayFramework插件,为PlayFramework应用程序开发提供便捷访问MongoDB的支持。其特性如下: Play数据模型的无缝集成,直接支持CRUD 支持嵌入和引用两种对象组合...

匿名
2012/05/01
840
0
使用Morphia完成对象到MongoDB的映射

Morphia是一个实现Java对象到MongoDB双向映射的类库。最近,James Williams在自己Blog上张贴了一篇相关的文章。 尽管MongoDB已经有了Grails插件,但James似乎更偏爱Morphia: 有人可能会奇怪...

红薯
2010/08/24
3K
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部