`

【转】Mongodb与spring集成(1)------配置

 
阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mongo="http://www.springframework.org/schema/data/mongo"
	xsi:schemaLocation="http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<context:property-placeholder location="classpath*:META-INF/mongodb/mongodb.properties"/>
	
	<!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
	<mongo:mongo id="mongo" replica-set="localhost:27017">
		<!-- 一些连接属性的设置 -->	
		<mongo:options
		     connections-per-host="${mongo.connectionsPerHost}"
		     threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
		     connect-timeout="${mongo.connectTimeout}"
		     max-wait-time="${mongo.maxWaitTime}"
		     auto-connect-retry="${mongo.autoConnectRetry}"
		     socket-keep-alive="${mongo.socketKeepAlive}"
		     socket-timeout="${mongo.socketTimeout}"
		     slave-ok="${mongo.slaveOk}"
		     write-number="1"
		     write-timeout="0"
		     write-fsync="true"/>		
	</mongo:mongo>

	<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
	<mongo:db-factory dbname="test" mongo-ref="mongo"/>

	<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
	  <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
	</bean>
	
	<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
	<mongo:mapping-converter base-package="com.xxx.xxx.domain" />
	
	<!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
	<mongo:repositories base-package="com.xxx.xxx.persist.mongodb"/>

	<!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
	<context:annotation-config />
    
</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类

@Document(collection="person")
@CompoundIndexes({
    @CompoundIndex(name = "age_idx", def = "{'lastName': 1, 'age': -1}")
})
public class Person<T extends Address> {

  @Id
  private String id;
  @Indexed(unique = true)
  private Integer ssn;
  private String firstName;
  @Indexed
  private String lastName;
  private Integer age;
  @Transient
  private Integer accountTotal;
  @DBRef
  private List<Account> accounts;
  private T address;

  
  public Person(Integer ssn) {
    this.ssn = ssn;
  }
  
  @PersistenceConstructor
  public Person(Integer ssn, String firstName, String lastName, Integer age, T address) {
    this.ssn = ssn;
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.address = address;
  }

 

Account类

@Document
public class Account {

  @Id
  private ObjectId id;
  private Float total;

}

 

MongoRepository实现增删改查和复杂查询

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

例:

public interface PersonRepository extends 

MongoRepository<Person, ObjectId>{
//这里可以添加额外的查询方法
}

 

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

例:

public interface PersonRepository extends 

MongoRepository<Person, ObjectId>{
 //查询大于age的数据 
       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原本查询语句的查询方式。
例:在原接口中加入

@Query("{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}")
public Page<Product> findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);

 

注释Query里面的就是mongodb原来的查询语法,我们可以定义传进来的查询参数,通过坐标定义方法的参数。

还可以在后面指定要返回的数据字段,如上面的例子修改如下,则只通过person表里面的name和age字段构建person对象。 

@Query(value="{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}",fields="{ 'name' : 1, 'age' : 1}") 
public Page<Product> findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);

 

 

转自:http://blog.csdn.net/laigood/article/details/7055630

分享到:
评论

相关推荐

    Spring-Data-MongoDB3.2

    这个版本可能包含了性能优化、新的特性和修复的bug,确保了与MongoDB 3.2的无缝集成。 **3. MongoDB 3.2特性** MongoDB 3.2引入了许多重要的改进,包括: - **新查询语言:** 引入了聚合框架的改进,如`$lookup`...

    MongoDB初探(二)----使用spring-data配置mongodb

    在本篇“MongoDB初探(二)----使用spring-data配置mongodb”中,我们将深入探讨如何利用Spring Data框架来集成和操作MongoDB数据库。Spring Data是Spring生态系统的一个重要组成部分,它提供了与各种数据存储系统...

    Spring3+Spring-data-mongodb1.5.6示例

    4. **Spring Data MongoDB**: 这是Spring Data的一个模块,专门用于与MongoDB集成。它提供了MongoTemplate和MongoOperations接口,用于执行数据库操作,还提供了一套Repository接口,允许开发者以声明式的方式定义...

    spring-data-mongodb-parent-reference

    这个框架支持快速开发且易于理解,它与 Spring 框架的其它部分能够很好地集成。 文档的标题为 "spring-data-mongodb-parent-reference",意味着这份PDF文档是关于如何使用Spring Data MongoDB的参考资料。文档的...

    spring-data-mongodb-reference 1.5.4

    - **设置 Spring Data MongoDB**:配置 Spring 应用程序上下文以使用 MongoDB。 **4.2 示例 Repository** - **ExamplesRepository**:通过示例代码演示如何使用 Spring Data MongoDB 进行数据访问。 **4.3 连接到...

    spring-boot-mongodb项目下载

    1. **添加依赖**:首先,我们需要在 `pom.xml` 或 `build.gradle` 文件中引入 Spring Boot 对 MongoDB 的支持。对于 Maven,可以添加如下依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-...

    Spring Data MongoDB中文文档

    - 这些特性极大地丰富了与 MongoDB 交互的方式,使得 **Spring Data MongoDB** 成为了与 MongoDB 集成的理想选择。 总之,**Spring Data MongoDB** 是一个强大的工具,它不仅简化了与 MongoDB 数据库的交互,还提供...

    spring-data-mongodb-1.2.0.RELEASE

    Spring Data MongoDB 1.2.0.RELEASE 为开发者提供了强大的工具,简化了 MongoDB 与 Spring 应用的集成。通过使用该版本,开发者可以更专注于业务逻辑,而不是繁琐的数据访问代码。理解并熟练掌握其核心概念和功能,...

    springboot整合mongodb+redis+mybatis+mysql

    SpringBoot 集成 MyBatis 主要通过 `mybatis-spring-boot-starter` 依赖,配置 MyBatis 的核心配置文件和 mapper 映射文件,可以实现 SQL 语句与 Java 代码的解耦。 MySQL 是一个广泛使用的开源关系型数据库管理...

    spring mongodb用到的jar包spring-date-mongodb1.4.2.zip

    Spring Data MongoDB提供了与MongoDB Java驱动程序的集成,包括连接池管理、会话管理以及异常转换。它封装了MongoDB的复杂性,让开发者能够专注于业务逻辑,而不是底层数据库操作。 **4. 使用示例** 在实际开发中,...

    spring-data-mongodb api

    Spring Data MongoDB可以与MongoDB的分片和复制集集成,以实现水平扩展和高可用性。 10. **版本控制与审计**: Spring Data MongoDB可以通过`@Version`注解实现乐观锁,以处理并发更新。同时,它还支持日志记录和...

    Springboot配置MongoDB连接池源代码

    在本文中,我们将深入探讨如何在Spring Boot应用中配置MongoDB连接池,同时也会涉及到Spring Boot与MyBatis以及MySQL数据库的整合。Spring Boot以其简洁的配置和强大的自动化配置功能,已经成为Java开发者构建微服务...

    spring-5.3.3-dist.zip

    1. **依赖注入(Dependency Injection,DI)**:这是Spring框架的核心特性,它允许开发者通过外部配置来管理对象及其依赖关系,从而降低了代码的耦合度,提高了可测试性和可维护性。 2. **AOP(面向切面编程)**:...

    spring-boot-samples-master

    3. **数据访问**:"spring-boot-sample-data-jpa"和"spring-boot-sample-data-mongodb"分别演示了如何与关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB)集成,使用JPA和Spring Data进行数据操作...

    Spring-data-mongo应用

    本案例主要介绍了如何在 Spring 4.1.3.RELEASE 版本下集成 MongoDB,并通过 Spring Data MongoDB 1.8.0 进行简单的数据操作。 #### 二、环境准备 - **Spring版本**:4.1.3.RELEASE - **Spring Data MongoDB版本**...

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

    总结来说,Spring Data MongoDB通过`MongoDBTemplate`简化了MongoDB的集成和操作,使得开发者能够专注于业务逻辑而不是底层数据库交互。对于初学者,这是一个很好的起点,可以快速上手MongoDB和Spring Data的使用。

    最新spring-data-mongo

    Spring Data Commons是一个核心模块,提供了与各种数据存储交互的一般机制,而`spring-data-mongo`则是专门针对MongoDB的数据访问层。这个组合使得Java开发者能够以一种声明式的方式处理MongoDB的数据操作,减少了...

    spring4.2 mongodb 全部jar包

    在IT行业中,Spring框架与MongoDB的集成是常见的开发需求,尤其在4.2版本时,Spring提供了对MongoDB的强大支持。本知识点将详细介绍Spring 4.2与MongoDB的集成,以及涉及到的相关jar包。 首先,Spring 4.2是Spring...

    spring-mongodb-jars

    标题“spring-mongodb-jars”表明我们关注的是Spring框架与MongoDB数据库的集成应用。Spring是Java领域的一个广泛应用框架,而MongoDB则是一种流行的NoSQL数据库系统,以其灵活性和高性能著称。它们的结合使得开发者...

    官方原版源码spring-framework-5.1.4.RELEASE.zip

    主要模块有Core Container(核心容器)、Data Access/Integration(数据访问与集成)、Web、AOP(面向切面编程)和Messaging(消息处理)。核心容器包括Bean工厂(BeanFactory)和ApplicationContext,它们是Spring...

Global site tag (gtag.js) - Google Analytics