`
glf2002lucky
  • 浏览: 10306 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mongodb与spring集成

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->        <!-- mongodb spring -->
        
<dependency>
            
<groupId>org.springframework.data</groupId>
            
<artifactId>spring-data-mongodb</artifactId>
            
<version>1.0.0.M5</version>
        
</dependency>

然后是配置文件

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?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类


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->@Document(collection="person")
@CompoundIndexes({
    @CompoundIndex(name 
= "age_idx", def = "{'lastName': 1, 'age': -1}")
})
public class Person<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类

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->@Document
public class Account {

  @Id
  
private ObjectId id;
  
private Float total;

}



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

例:


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public interface PersonRepository extends 

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



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

例:


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->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原本查询语句的查询方式。
例:在原接口中加入


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->@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对象。


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->@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);
分享到:
评论

相关推荐

    mongodb-spring 整合包

    本整合包正是针对这一需求而准备的,它包含了实现MongoDB与Spring集成所需的所有组件。 首先,我们需要了解MongoDB-Spring的数据访问层(Data Access Layer)。Spring Data MongoDB 提供了一种简单的方式来操作...

    Linux下安装MongoDB复制集+用户认证,与Spring集成操作

    以上就是Linux环境下MongoDB复制集的安装与用户认证,以及与Spring集成的操作步骤。这个过程中,需要注意的是安全设置,如防火墙规则,以及监控复制集的健康状态。通过合理的配置和使用,可以确保MongoDB在高可用性...

    maven(jersey+redis+mongodb+spring)集成

    【标题】:“maven(jersey+redis+mongodb+spring)集成” 在现代软件开发中,集成多种技术栈是常见的需求。"maven(jersey+redis+mongodb+spring)集成"指的是使用Maven作为项目构建工具,将Jersey用于RESTful API开发...

    MongoDB复制集及与Spring集成操作

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

    mongodb+spring+hibernate集成入门demo

    Spring Data MongoDB 是Spring的一个模块,它提供了与MongoDB的集成,使得开发者可以利用Spring Data的查询方法定义和Repository抽象。通过定义Repository接口,我们可以轻松地进行CRUD操作,而无需编写大量的DAO层...

    JAVA操作MongoDB之spring整合

    首先,集成MongoDB到Spring项目中,我们需要在`pom.xml`文件中添加MongoDB和Spring Data MongoDB的相关依赖。这通常包括`mongodb-driver`、`spring-data-mongodb`和`spring-boot-starter-data-mongodb`等。例如: `...

    mongodb + spring3.1.1增删改查

    综上所述,MongoDB与Spring 3.1.1的集成使得在Java环境中处理NoSQL数据变得简单高效。通过Spring Data MongoDB,你可以轻松地进行数据操作,同时利用Spring的强大功能,如依赖注入和事务管理,以构建稳定、可扩展的...

    springcloud+nocos+mongodb+redis+es

    主要有三个模块,springcloud集成es,gateway,mongdodb, 通知有基于feign调用的整套代码注解说明 能帮助大家轻易打建springcloud基于nocos配置,注册中心的微服务架构 包含了远程共享私库 manven配置, nacos配置...

    Mongodb源码

    在项目中,"mongoTest"可能是一个测试目录,包含了测试类,用于验证MongoDB与Spring集成后的功能是否正常工作。测试类通常会使用`@Autowired`注解注入`MongoTemplate`或自定义的Repository实例,然后调用其方法进行...

    mongodb+spring+strust框架完整示例版本

    Spring 还包含了许多模块,如Spring MVC、Spring JDBC、Spring ORM等,可以方便地与各种持久层技术(如MongoDB)集成。Spring Data MongoDB 是Spring 提供的一个子项目,专门用于简化与MongoDB的交互。 Struts 是...

    mongodb&spring&struts&springdatamongodb整合,带所有jar,需要的拿走

    MongoDB、Spring、Struts和Spring Data MongoDB...总的来说,这个整合项目为开发者提供了一个学习和实践MongoDB、Spring、Struts以及Spring Data MongoDB集成的良好起点,有助于理解和掌握这些技术在实际开发中的应用。

    Spring集成Mongodb配置含jar包

    下面将详细介绍Spring集成MongoDB的相关知识点。 1. **Spring Data MongoDB**: Spring Data项目提供了一套统一的API,使得操作各种持久化存储变得简单。Spring Data MongoDB是该项目的一个模块,它允许开发者通过...

    mongodb整合spring文档

    Spring框架作为Java领域中非常流行的开发框架之一,提供了强大的支持来帮助开发者更便捷地与MongoDB进行集成。本文将详细介绍如何在Spring项目中整合MongoDB,并重点讲解配置文件的编写。 #### 二、所需依赖 为了...

    MongoDB spring hibernate java 集成demo

    MongoDB spring hibernate java 集成demo

    用MongoDB和Spring_Data创建Java应用

    ### 使用MongoDB与Spring Data创建Java应用:深入解析与实践指南 #### MongoDB与Spring Data简介 MongoDB,作为NoSQL数据库家族的一员,以其强大的可扩展性、高性能和开源特性,在数据库领域占据了一席之地。不同...

    Spring集成MongoDB官方指定jar包:spring-data-mongodb-1.4.1.RELEASE.jar

    Spring集成MongoDB官方指定jar包:spring-data-mongodb-1.4.1.RELEASE.jar

    基于 MongoDB 及 Spring Boot 的文件服务器的实现

    综上所述,本项目通过集成MongoDB和Spring Boot,实现了文件的高效存储和访问,为开发者提供了一种灵活且可扩展的文件服务器解决方案。理解并掌握这些知识点,有助于开发者在实际项目中构建类似功能的系统。

    Spring Data MongoDB中文文档

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

    mongodb整合spring、hibernate、mysql

    首先,Spring与MongoDB的集成主要通过Spring Data MongoDB模块实现。该模块提供了一种声明式的方式来操作MongoDB,例如定义Repository接口,Spring会自动提供实现来处理CRUD(创建、读取、更新、删除)操作。同时,...

    Spring-Mongodb例子

    这个例子对于初学者来说,是一个很好的起点,能够帮助理解Spring与MongoDB的集成原理和实践方法。 总的来说,Spring和MongoDB的结合提供了一个高效、灵活且易于使用的数据存储解决方案,适用于那些需要处理大量非...

Global site tag (gtag.js) - Google Analytics