mongodb注解详解

1、@Entity
如果你想通过Morphia把你的对象保存到Mongo中,你首先要做的是使用@Entity注解你的类:
@Entity(value="comm_user_favorite_count",noClassnameStored=true)在@Entity注解中提供了一个可选的参数用来标识是否在文档中保存类名。
2、@Entity实体类,name为collection的名称,noClassnameStored用来标识是否需要存储className字段来表示类名,为什么要使用他哪?保存类名的主要目的是,当你在同一个链接中保存不同的实体对象,但是你想
作为他们的基类或超类来读取。
如:
@Entity("animals") abstract class Animal { String name; }
@Entity("animals") Cat extends Animal { ... }
@Entity("animals") Dog extends Animal { ... }
//And then performing the following query...
List<Animal> animals = ds.createQuery(Animal.class).asList();
正如你看到的,如果不在文档中保存类名,Morphia将不能正确的识别创建那个类。
如果你在一个链接中只保存唯一的实体类型并且你还关心你的数据库大小,在你的@Entity注解上加上noClassnameStored=true
参数将会是安全的。

3、mongoDB默认要持久所有对象 可以同@Transient //这个表示不持久来表示一个字段不持久。

4、@Id
被@Entity注解的类必须有一个唯一的 @Id值;这些值被保存在 MongoDB数据库的“id”属性中,这是一个必须的为索引。被@Id注解的ID是ObjectId类型的,这样,你就不用担心Id的生成问题了,Mongo会自动为你生成一
个唯一的新的ObjectId对象(就行MySQL中的auto_increment类型的ID)。如果你想使用其他的类型作为ID,那么在你保存数据时就必须
手动为ID赋值。
@Id private ObjectId id;

5、 @Indexed
此注解是为某个字段申请一个索引。 当datastore.ensureIndexes() 方法被调用时 这些索引就会被申请
参数说明如下:
value: 表名这个索引的方向; IndexDirection.ASC(升序),IndexDirection.DESC(降序), IndexDirection.BOTH(两者)
默认为 升序;[size=large][/size]
name: 被创建的索引的 名称; mongodb默认创建的索引名的格式为(key1_1/-1_key2_1)
unique: 创建一个唯一索引,当创建唯一索引后,当在此字段插入相同的值时将会报错。true:为唯一索引;false:不是唯一索引。
默认为:false
dropDups:此参数表明,当为某个字段创建唯一索引时,删除其他相同值的记录。只保留第一条记录。true:删除重复,
false:不删除重复(当有重复值时唯一索引创建失败);默认为false.
注意:当在一个存在的系统上,创建已经存在的索引时,将不会花费任何事件(也不会做任何事情)。
Morphia m = .....
Datastore ds = ....
m.map(Product.class);
ds.ensureIndexes(); //为被@Indexed注解的所有字段创建索引。
@Indexes(@Index("userId,category"))根据用户ID,用户类型

6、@Embedded
你可以创建一个类被嵌套在实体类中,在这种情况下我们可以使用@Embedded注解。例如,在Hotel类中 可能会有一个Address。
Address是Hotel不可分割的一部分,没有ID, 并且不会被存储在分开的collection中。在这种情况下我们可以使用@Embedded注解
Address.
@Entity
public class Hotel{
...
@Id
private ObjectId id;
@Embedded(“address”)
private Address address;
...
}
@Embedded
public class Address{
...
}
正如你所看到的,被@Embedded注解的类没有@Id。 这是因为他们经常被嵌套在其他类中。事实上,被@Embedded注解的类也不允许有@Id

7、@Reference
和@Embedded类似,但是被存储在分开的collection中
@Entity
public class BlogEntry {

@Id
private ObjectId id;

private String title;
private Date publishDate;
private String body;

@Reference(“blog _author”)
private Author author;

// getters and setters
}

...

@Entity(“author”)
public class Author {

@Id
private ObjectId id;

private String username;
private String fullName;
private String emailAddress;

// getters and setters
}

@Property
指定对应数据的名称如@Property("started")

@AlsoLoad
Load的时候可以从一个或多个域里取值,但要保证这多个域在同一个document里只出现一次 如 字段定义了 title字段 并注解了 @AlsoLoad({"xxx",”xxx1”}),则可以从数据库的title、xxx、xxx1里取值,但同一个document里只能存在 title、xxx、xxx1里的一个

@NotSaved
只会被load不会被save

@PrePersist – 在保存之前调用
@PostPersist – 保存之后调用
@PreLoad – 在映射成POJO前调用
@PostLoad – 在映射成POJO后调用
1.了解Spring 2.了解NoSQL和文档数据库 3.要求 4.其他帮助资源 4.1。支持 4.1.1。社区论坛 4.1.2。专业支持 4.2。发展之后 5.新&值得注意的 5.1。Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。Spring Data MongoDB 1.7中有什么新功能 6.依赖 6.1。Spring Boot的依赖管理 6.2。Spring框架 7.使用Spring Data Repositories 7.1。核心概念 7.2。查询方法 7.3。定义存储库接口 7.3.1。微调储存库定义 7.3.2。空处理存储库方法 7.3.3。将存储库与多个Spring Data模块一起使用 7.4。定义查询方法 7.4.1。查询查询策略 7.4.2。查询创建 7.4.3。属性表达式 7.4.4。特殊参数处理 7.4.5。限制查询结果 7.4.6。流式查询结果 7.4.7。异步查询结果 7.5。创建存储库实例 7.5.1。XML配置 7.5.2。JavaConfig 7.5.3。独立使用 7.6。Spring Data存储库的自定义实现 7.6.1。定制个人存储库 7.6.2。自定义基础存储库 7.7。从聚合根发布事件 7.8。Spring数据扩展 7.8.1。Querydsl扩展 7.8.2。Web支持 7.8.3。存储库填充程序 7.8.4。传统网络支持 参考文档 8.介绍 8.1。文档结构 9. MongoDB支持 9.1。入门 9.2。示例存储库 9.3。用Spring连接到MongoDB 9.3.1。使用基于Java的元数据注册Mongo实例 9.3.2。使用基于XML的元数据注册Mongo实例 9.3.3。MongoDbFactory接口 9.3.4。使用基于Java的元数据注册MongoDbFactory实例 9.3.5。使用基于XML的元数据注册MongoDbFactory实例 9.4。MongoTemplate简介 9.4.1。实例化MongoTemplate 9.4.2。WriteResultChecking策略 9.4.3。WriteConcern 9.4.4。WriteConcernResolver 9.5。保存,更新和删除文档 9.5.1。如何_id在映射图层中处理该字段 9.5.2。类型映射 9.5.3。保存和插入文件的方法 9.5.4。更新集合中的文档 9.5.5。在集合中插入文档 9.5.6。在集合中查找和插入文档 9.5.7。删除文件的方法 9.5.8。乐观锁定 9.6。查询文件 9.6.1。查询集合中的文档 9.6.2。查询文件的方法 9.6.3。查询不同的值 9.6.4。地理空间查询 9.6.5。GeoJSON支持 9.6.6。全文查询 9.6.7。排序规则 9.6.8。JSON模式 9.6.9。流利的模板API 9.7。按实例查询 9.7.1。介绍 9.7.2。用法 9.7.3。示例匹配器 9.7.4。执行一个例子 9.7.5。无类型示例 9.8。减少地图操作 9.8.1。使用示例 9.9。脚本操作 9.9.1。使用示例 9.10。集团运营 9.10.1。使用示例 9.11。聚合框架支持 9.11.1。基本概念 9.11.2。支持的聚合操作 9.11.3。投影表达式 9.11.4。分面分类 9.12。用自定义转换器覆盖默认映射 9.12.1。使用已注册的Spring Converter进行保存 9.12.2。使用Spring转换器读取 9.12.3。使用MongoConverter注册Spring转换器 9.12.4。转换器消除歧义 9.13。索引和集合管理 9.13.1。创建索引的方法 9.13.2。访问索引信息 9.13.3。使用集合的方法 9.14。执行命令 9.14.1。执行命令的方法 9.15。生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的MongoDB支持 10.1。入门 10.2。使用Spring和Reactive Streams Driver连接到MongoDB 10.2.1。使用基于Java的元数据注册MongoClient实例 10.2.2。ReactiveMongoDatabaseFactory接口 10.2.3。使用基于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值