`
sunday132
  • 浏览: 51140 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

spring-data-mongo

 
阅读更多

全文摘自:http://www.open-open.com/lib/view/open1331791414140.html

 

 

这里我们用到的是spring-data中一个集成mongodb的项目,首先在maven中添加对它的依赖,这里我用的是1.0.0.M5版本

1 <!-- mongodb spring --> 
2 <dependency
3     <groupId>org.springframework.data</groupId
4     <artifactId>spring-data-mongodb</artifactId
5     <version>1.0.0.M5</version
6 </dependency>

然后是配置文件

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"/>
12      
13     <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
14     <mongo:mongo id="mongo" replica-set="localhost:27017">
15         <!-- 一些连接属性的设置 -->   
16         <mongo:options
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}"
25              write-number="1"
26              write-timeout="0"
27              write-fsync="true"/>       
28     </mongo:mongo>
29  
30     <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
31     <mongo:db-factory dbname="test" mongo-ref="mongo"/>
32  
33     <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
34     <bean id="mongoTemplate"class="org.springframework.data.mongodb.core.MongoTemplate">
35       <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
36     </bean>
37      
38     <!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
39     <mongo:mapping-converter base-package="com.xxx.xxx.domain" />
40      
41     <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
42     <mongo:repositories base-package="com.xxx.xxx.persist.mongodb"/>
43  
44     <!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
45     <context:annotation-config />
46      
47 </beans>

这样基本配置就完成了

 


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")
02 @CompoundIndexes({
03     @CompoundIndex(name = "age_idx", def = "{'lastName': 1, 'age': -1}")
04 })
05 public class Person<T extends Address> {
06  
07   @Id
08   private String id;
09   @Indexed(unique = true)
10   private Integer ssn;
11   private String firstName;
12   @Indexed
13   private String lastName;
14   private Integer age;
15   @Transient
16   private Integer accountTotal;
17   @DBRef
18   private List<Account> accounts;
19   private T address;
20  
21    
22   public Person(Integer ssn) {
23     this.ssn = ssn;
24   }
25    
26   @PersistenceConstructor
27   public Person(Integer ssn, String firstName, String lastName, Integer age, T address) {
28     this.ssn = ssn;
29     this.firstName = firstName;
30     this.lastName = lastName;
31     this.age = age;
32     this.address = address;
33   }

Account类

1 @Document
2 public class Account {
3  
4   @Id
5   private ObjectId id;
6   private Float total;
7  
8 }

 

与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoRepository<T, TD>接口,其中T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId。之后在service中注入该接口就可以使用,无需实现里面的方法,spring会根据定义的规则自动生成。

例:

1 public interface PersonRepository extends
2  
3 MongoRepository<Person, ObjectId>{
4 //这里可以添加额外的查询方法
5

但是MongoRepository实现了的只是最基本的增删改查的功能,要想增加额外的查询方法,可以按照以下规则定义接口的方法。自定义查询方法,格式为“findBy+字段名+方法后缀”,方法传进的参数即字段的值,此外还支持分页查询,通过传进一个Pageable对象,返回Page集合。

 

例:

1 public interface PersonRepository extends
2  
3 MongoRepository<Person, ObjectId>{
4  //查询大于age的数据
5        public Page<Product> findByAgeGreaterThan(int age,Pageable page) ;
6

下面是支持的查询类型,每三条数据分别对应:(方法后缀,方法例子,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,doubleageTo,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,doubleageTo,Pageable page);
分享到:
评论

相关推荐

    spring-data-mongo-1.0.0.M5.zip

    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-data-mongo应用

    &lt;mongo:db-factory id="mongoDbFactory" dbname="${mongo.defaultDbName}" mongo-ref="mongoClient"/&gt; &lt;!-- Spring 提供的 MongoDB 操作模板 --&gt; &lt;mongo:template id="mongoTemplate" db-factory-ref=...

    spring-data-mongo配置成功

    《Spring Data MongoDB 配置详解》 在Java开发中,Spring框架因其强大的功能和灵活性而备受推崇,而在处理NoSQL数据库如MongoDB时,Spring Data MongoDB提供了便捷的接口和抽象,使得开发者能更加专注于业务逻辑,...

    spring-mongo-data

    标题“spring-mongo-data”指的是Spring Data MongoDB项目,这是一个Java框架,用于简化与MongoDB数据库的交互。Spring Data是Spring框架的一部分,它提供了一种声明式的方法来处理各种数据存储,包括关系型数据库和...

    最新spring-data-mongo

    `mongo-java-driver`是官方提供的Java客户端驱动,用于与MongoDB服务器通信。它提供了连接管理、文档操作、数据库操作等API,使开发者能直接与MongoDB进行交互。例如: - `MongoClient`:用于连接MongoDB服务器。 ...

    Spring-Data-MongoDB3.2

    Spring Data MongoDB提供了与MongoDB数据库交互的一系列抽象,包括MongoTemplate和Repository接口。通过这些接口,开发人员无需直接编写MongoDB的Java驱动程序代码,就能实现CRUD(创建、读取、更新和删除)操作,...

    最新spring-data-mongo官方示例

    这个"最新spring-data-mongo官方示例"提供了丰富的代码示例,帮助开发者理解和掌握如何使用Spring Data MongoDB来操作非关系型数据库。 MongoDB是一个流行的NoSQL数据库,以其灵活性、高性能和强大的文档模型而受到...

    spring-data-mongo-reference.pdf

    MongoTemplate 是 Spring Data MongoDB 中的核心类,用于执行各种数据库操作。通过 MongoTemplate,开发者可以进行文档的保存、更新、删除以及查询等操作。 #### 文档操作 Spring Data MongoDB 提供了丰富的文档...

    spring-data集成mongodb大数据量分页+自增id实现+MongodbPlugin集成

    skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~

    spring-data-mongo-1.0.1.RELEASE.zip

    1. **MongoTemplate**:这是Spring Data MongoDB的主要操作类,它提供了对MongoDB的低级别API的封装,允许开发者执行基本的CRUD(创建、读取、更新、删除)操作以及更复杂的查询。 2. **MongoRepository**:这是一...

    SPRING3.2.4以及依赖包附加MONGODB相关驱动

    3. `spring-data-mongo-1.0.0.M5.zip`:这是Spring Data MongoDB的一个早期里程碑版本,它提供了与MongoDB数据库的集成,包括对象映射、查询构造、事务管理等功能。M5表示这是一个预发布版本,可能比最终的GA版本稍...

    spring-data-mongodb-1.7.0.jar包.zip

    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已经打包在...

    spring-data-mongodb-parent-reference

    Spring Data MongoDB 是一个为 MongoDB 文档数据库提供数据访问支持的框架,它属于 Spring Data 项目的一部分,目的是简化基于 Java 应用的数据访问层的编程工作。通过使用 Spring Data MongoDB,开发人员可以很容易...

    Spring-data-mongodb_1.9.4_API_docs

    Spring-data-mongodb_1.9.4_API_docs

    jastar-wang-demo-springdata-mongo-master.zip

    本篇文章将深入探讨"jastar-wang-demo-springdata-mongo-master.zip"这一项目,带你领略Spring Data MongoDB的精髓。 首先,"jastar-wang-demo-springdata-mongo-master.zip"是一个基于Spring Boot的示例项目,它...

    Java Spring-data for mongodb

    《Java Spring-data for MongoDB:深度解析与应用实践》 在当今大数据时代,MongoDB作为一款非关系型数据库,因其灵活性和高性能受到了广泛的关注。而Java Spring-data框架则为开发人员提供了一种简单、高效的方式...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    &lt;bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"&gt; ``` 一旦有了`MongoDBTemplate`,你就可以开始执行各种数据库操作了。比如,你可以使用`save()`方法保存一个对象到...

    spring-data-mongodb1.2.0

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单而有效的方式来集成Spring应用程序与MongoDB数据库。这个"spring-data-mongodb1.2.0"版本是针对Spring Data MongoDB的1.2.0.RELEASE更新,它包含...

    spring-data-mongodb-encrypt:轻量级的库,用于在mongodb + spring中进行简单轻松的按字段加密

    spring-data-mongodb-encrypt 允许将任何字段都标记为@Encrypted以进行逐字段加密。 产品特点 透明地集成到spring-data-mongodb 支持嵌套的集合,地图和bean 高性能(无反射,优化了加密) 密钥版本控制(以帮助...

    spring-data-mongodb-reference 1.5.4

    - **MongoTemplate 类**:是 Spring Data MongoDB 中的核心类之一,用于执行基本的 CRUD 操作和其他更复杂的操作。 - **实例化 MongoTemplate**:通过构造函数或工厂方法来创建 `MongoTemplate` 实例。 - **...

Global site tag (gtag.js) - Google Analytics