`

Mongo和Spring集成配置

阅读更多

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

        <!-- mongodb spring -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.0.0.M5</version>
        </dependency>

然后是配置文件

<?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;

}



与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);

 

分享到:
评论

相关推荐

    mongo集成spring struts2 json velocity

    开发者可以通过定义Repository接口,利用Spring的自动配置和AOP代理,实现对MongoDB数据库的CRUD操作。 其次,Spring框架在这里起到了核心的作用,它负责管理Bean、处理依赖注入、事务控制等。Spring MVC作为Spring...

    spring集成mongo所需jar

    综上所述,"spring集成mongo所需jar"涉及的关键知识点包括Spring Data MongoDB框架、MongoDB Java驱动、项目构建工具(如Maven或Gradle)的依赖管理以及MongoDB的集成配置和操作。通过正确引入这些jar文件并按照上述...

    Mongo集成Spring

    6. **Morphia**: `Mongo_Morthia_Spring` 可能指的是使用 Morphia 框架集成 MongoDB 和 Spring。Morphia 是一个针对 MongoDB 的对象数据映射库,它简化了将 Java 对象与 MongoDB 文档之间的转换。虽然 Spring Data ...

    spring_mongo项目示例

    **Spring MongoDB 示例** 在本文中,我们将深入探讨`spring_mongo`项目示例,这是一个基于Spring框架...这个示例涵盖了从配置数据库到创建RESTful API的完整流程,是学习和实践Spring与MongoDB集成的一个理想起点。

    Spring集成Mongodb配置含jar包

    在IT行业中,Spring框架是...通过合理配置和恰当使用Spring Data MongoDB的各种特性,可以构建出高效、灵活的MongoDB应用。在实际开发过程中, mongodemo项目可以作为参考,帮助理解如何将这些概念应用到实际代码中。

    spring4+mongo3整合

    这工程项目为SpringMVC+spring4+hibernate3+mongo整合项目 不过注意的是: 使用mongo时,要确定下你的mongo服务版本。如果服务端是3.X的版本,你用2的客户端是用户密码是验证不通过的。所以需要选择对应的客户端。 ...

    springMvc配置mongo数据库

    总结来说,Spring MVC与MongoDB的集成主要包括引入相关依赖、配置MongoDB连接信息、创建MongoTemplate bean、定义Repository接口以及在Controller中注入并使用这些接口。通过这种方式,我们可以充分利用Spring的便利...

    spring-mongo-data

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

    spring-mvc-mongo-monitor

    Spring MVC提供了多种方式来集成MongoDB,例如使用`MongoTemplate`或`MongoDataRepository`接口。监控可以通过集成第三方工具实现,如Spring Boot Actuator,它提供了一套丰富的健康检查和监控端点。此外,还可以...

    spring4集成mongodb休闲项目

    集成Spring 4和MongoDB的关键在于Spring Data MongoDB模块。该模块提供了一套便捷的API,用于操作MongoDB数据库。通过使用`MongoTemplate`或`MongoRepository`接口,我们可以轻松执行CRUD(创建、读取、更新、删除)...

    Spring-data-mongo应用

    ### Spring-data-mongo应用知识点详解 #### 一、Spring Data MongoDB 概述 Spring Data MongoDB 是 Spring Data 项目的一部分,它提供了一套统一的数据访问抽象层,使得开发人员能够更加容易地进行数据库操作,而...

    embedded-mongo-spring

    嵌入式mongo弹簧概述Spring TestContext Framework 提供注解驱动的单元和集成测试支持。 Fongo 是 MongoDB 的内存 Java 实现。 Embedded-mongo-spring 提供了一种在 Spring TestContext Framework 中使用 fgo 的方法...

    springMongodb参考文档中文版

    - **Spring Boot的依赖管理**:Spring Boot简化了项目中依赖项的管理和配置。 - **Spring框架**:Spring框架提供了核心的功能和服务,如依赖注入、事务管理等。 #### 7. 使用Spring Data Repositories - **核心概念...

    mongo-2.8.0jar包以及spring整合的jar包

    6. **Spring Boot集成**:Spring Boot简化了MongoDB的集成,只需要少量配置即可自动配置MongoDB数据源和Repository。 7. **数据迁移**:Spring Data MongoDB还支持数据迁移工具,帮助在不同版本的MongoDB数据库之间...

    maven-spring-mongo

    这个项目主要是为了演示如何在 Spring 应用程序中配置和使用 MongoDB 进行数据存储,以及进行基本的 CRUD(创建、读取、更新和删除)操作。下面我们将深入探讨相关的知识点。 1. **MongoDB**:MongoDB 是一个基于...

    spring MVC morphia mongo 整合的例子

    在这个"spring MVC morphia mongo 整合的例子"中,你将看到如何将这三个组件集成到一起,创建一个能够利用MongoDB存储数据,并通过Spring MVC处理HTTP请求的Web应用。以下是一些关键知识点: 1. **Spring MVC**:...

    spring-mongo:Spring启动+ MongoDB集成

    "spring-mongo:Spring启动+ MongoDB集成"的主题涉及了如何将这两个强大的技术结合在一起,创建高效、可扩展的应用程序。 首先,Spring框架为开发者提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、事务管理...

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

    该项目包含了完整的配置和代码,可以直接运行,对于初学者来说是极好的学习资源。 Spring Data MongoDB是Spring Data项目的一部分,它提供了一种声明式的方式,使得我们可以用Java对象直接操作MongoDB文档。在本...

    MongoDB复制集及与Spring集成操作

    本文将详细介绍如何在Linux环境下设置MongoDB复制集,同时涵盖用户认证的配置以及MongoDB与Spring框架的集成。 首先,让我们了解MongoDB复制集。复制集是MongoDB中的一组MongoDB实例,它们之间保持着数据同步。当主...

    spring-cache-mongodb:基于MongoDB的Spring Cache实现

    5. **MongoDB集成**:在Spring Cache中使用MongoDB作为缓存存储,需要配置MongoDB的连接信息,并使用Spring Data MongoDB提供的库来与数据库交互。这通常涉及到`MongoTemplate`或`MongoRepository`的使用。 6. **...

Global site tag (gtag.js) - Google Analytics