全文摘自:http://www.open-open.com/lib/view/open1331791414140.html
这里我们用到的是spring-data中一个集成mongodb的项目,首先在maven中添加对它的依赖,这里我用的是1.0.0.M5版本
3 |
< groupId >org.springframework.data</ groupId >
|
4 |
< artifactId >spring-data-mongodb</ artifactId >
|
5 |
< version >1.0.0.M5</ version >
|
然后是配置文件
01 |
<? xml version = "1.0" encoding = "UTF-8" ?>
|
02 |
< beans xmlns = "http://www.springframework.org/schema/beans"
|
03 |
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context"
|
04 |
xmlns:mongo = "http://www.springframework.org/schema/data/mongo"
|
05 |
xsi:schemaLocation="http://www.springframework.org/schema/context
|
06 |
http://www.springframework.org/schema/context/spring-context-3.0.xsd
|
07 |
http://www.springframework.org/schema/data/mongo
|
08 |
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
|
09 |
http://www.springframework.org/schema/beans
|
10 |
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
|
11 |
< context:property-placeholder location = "classpath*:META-INF/mongodb/mongodb.properties" />
|
14 |
< mongo:mongo id = "mongo" replica-set = "localhost:27017" >
|
17 |
connections-per-host = "${mongo.connectionsPerHost}"
|
18 |
threads-allowed-to-block-for-connection-multiplier = "${mongo.threadsAllowedToBlockForConnectionMultiplier}"
|
19 |
connect-timeout = "${mongo.connectTimeout}"
|
20 |
max-wait-time = "${mongo.maxWaitTime}"
|
21 |
auto-connect-retry = "${mongo.autoConnectRetry}"
|
22 |
socket-keep-alive = "${mongo.socketKeepAlive}"
|
23 |
socket-timeout = "${mongo.socketTimeout}"
|
24 |
slave-ok = "${mongo.slaveOk}"
|
31 |
< mongo:db-factory dbname = "test" mongo-ref = "mongo" />
|
34 |
< bean id = "mongoTemplate" class = "org.springframework.data.mongodb.core.MongoTemplate" >
|
35 |
< constructor-arg name = "mongoDbFactory" ref = "mongoDbFactory" />
|
39 |
< mongo:mapping-converter base-package = "com.xxx.xxx.domain" />
|
42 |
< mongo:repositories base-package = "com.xxx.xxx.persist.mongodb" />
|
45 |
< context:annotation-config />
|
这样基本配置就完成了
spring-data-mongodb中的实体映射是通过
MongoMappingConverter这个类实现的。它可以通过注释把
java类转换为mongodb的文档。
它有以下几种注释:
@Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。
@Document - 把一个java类声明为mongodb的文档,可以通
过collection参数指定这个类对应的文档。
@DBRef - 声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。
@Indexed - 声明该字段需要索引,建索引可以大大的提高查询效率。
@CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
@GeoSpatialIndexed - 声明该字段为地理信息的索引。
@Transient - 映射忽略的字段,该字段不会保存到
mongodb。
@PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据。
以下引用一个官方文档的例子:
Person类
01 |
@Document (collection= "person" )
|
03 |
@CompoundIndex (name = "age_idx" , def = "{'lastName': 1, 'age': -1}" )
|
05 |
public class Person<T extends Address> {
|
09 |
@Indexed (unique = true )
|
11 |
private String firstName;
|
13 |
private String lastName;
|
16 |
private Integer accountTotal;
|
18 |
private List<Account> accounts;
|
22 |
public Person(Integer ssn) {
|
26 |
@PersistenceConstructor
|
27 |
public Person(Integer ssn, String firstName, String lastName, Integer age, T address) {
|
29 |
this .firstName = firstName;
|
30 |
this .lastName = lastName;
|
32 |
this .address = address;
|
Account类
与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoRepository<T, TD>接口,其中T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId。之后在service中注入该接口就可以使用,无需实现里面的方法,spring会根据定义的规则自动生成。
例:
1 |
public interface PersonRepository extends
|
3 |
MongoRepository<Person, ObjectId>{ |
但是MongoRepository实现了的只是最基本的增删改查的功能,要想增加额外的查询方法,可以按照以下规则定义接口的方法。自定义查询方法,格式为“findBy+字段名+方法后缀”,方法传进的参数即字段的值,此外还支持分页查询,通过传进一个Pageable对象,返回Page集合。
例:
1 |
public interface PersonRepository extends
|
3 |
MongoRepository<Person, ObjectId>{ |
5 |
public Page<Product> findByAgeGreaterThan( int age,Pageable page) ;
|
下面是支持的查询类型,每三条数据分别对应:(方法后缀,方法例子,mongodb原生查询语句)
GreaterThan(大于)
findByAgeGreaterThan(int age)
{"age" : {"$gt" : age}}
LessThan(小于)
findByAgeLessThan(int age)
{"age" : {"$lt" : age}}
Between(在...之间)
findByAgeBetween(int from, int to)
{"age" : {"$gt" : from, "$lt" : to}}
IsNotNull, NotNull(是否非空)
findByFirstnameNotNull()
{"age" : {"$ne" : null}}
IsNull, Null(是否为空)
findByFirstnameNull()
{"age" : null}
Like(模糊查询)
findByFirstnameLike(String name)
{"age" : age} ( age as regex)
(No keyword) findByFirstname(String name)
{"age" : name}
Not(不包含)
findByFirstnameNot(String name)
{"age" : {"$ne" : name}}
Near(查询地理位置相近的)
findByLocationNear(Point point)
{"location" : {"$near" : [x,y]}}
Within(在地理位置范围内的)
findByLocationWithin(Circle circle)
{"location" : {"$within" : {"$center" : [ [x, y], distance]}}}
Within(在地理位置范围内的)
findByLocationWithin(Box box)
{"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}
尽管以上查询功能已经很丰富,但如果还不能满足使用情况的话可以用一下方法---基于mongodb原本查询语句的查询方式。
例:在原接口中加入
1 |
@Query ( "{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}" )
|
2 |
public Page<Product> findByNameAndAgeRange(String name, double ageFrom, double ageTo,Pageable page);
|
注释Query里面的就是mongodb原来的查询语法,我们可以定义传进来的查询参数,通过坐标定义方法的参数。
还可以在后面指定要返回的数据字段,如上面的例子修改如下,则只通过person表里面的name和age字段构建person对象。
1 |
@Query (value= "{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}" ,fields= "{ 'name' : 1, 'age' : 1}" )
|
2 |
public Page<Product> findByNameAndAgeRange(String name, double ageFrom, double ageTo,Pageable page);
|
相关推荐
spring-data-mongo-1.0.0.M5.zip 11年10月25号出来的 要配合spring-data-commons-1.2.0.M2.zip使用 不然底层会报错 spring-data-commons-1.2.0.M2.zip我已经传上去了~
Spring 4.1.3.RELEASE Spring-data-mongo 1.8.0 mongodb 3.1.0
spring-data-commons-1.9.0.RELEASE mongo-java-driver-2.11.3 spring-data-mongodb-1.6.1.RELEASE
spring-data-mongo-reference.pdf
NULL 博文链接:https://solid210.iteye.com/blog/1474672
spring-data-mongo-1.0.1.RELEASE.zip
NULL 博文链接:https://zhaoxiaoboblogs.iteye.com/blog/2300790
最新 spring-data-mongo 官方示例
Spring-Data-MongoDB 1.9.3、MongoDB3.2整合
springmvc与mongoDB集成需要下面几个的jar包:mongo-java-driver-3.0.1.jarspring-data-commons-1.10.0.RELEASE.jarspring-data-commons-core-1.4.1.RELEASE.jarspring-data-mongodb-1.7.0.RELEASE.jar已经打包在...
skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~
。。。。。。。spring-data-mongodb-1.2.0.RELEASE
spring-data-mongodb-encrypt 允许将任何字段都标记为@Encrypted以进行逐字段加密。 产品特点 透明地集成到spring-data-mongodb 支持嵌套的集合,地图和bean 高性能(无反射,优化了加密) 密钥版本控制(以帮助...
包括spring-data-mongodb-1.7.0.jar、spring-data-commons-1.10.0.RELEASE.jar、spring-data-commons-core-1.4.1.RELEASE.jar、mongo-java-driver-3.0.1.jar 对应支持的mongoDB版本为3.0.3,自己整理好的方便大家...
自己开发能跑的项目 spring-data-mongodb整合spring-boot
最近在学习Redis并集成到spring中去,发现Spring的RedisTemplate并不好用,还没有MongoTemplate好用。 而且发现Jedis和ShardedJedis的方法非常多,覆盖了Redis几乎所有操作,但是没有注释,也没有异常处理,也没有...
mongo-1.4 jar包 Spring Data MongoDB - Reference Documentation
雅米工作室 用户:admin 密码:111111 springmvc、shiro、mybatis、spring-data-mongo等制作的样板
spring-mongodb-morphia springdata-mongo morphia mongodb 学习
Spring Data MongoDB API。 Spring Data MongoDB 开发文档。