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);
相关推荐
spring集成Mongodb环境搭建,仅供参考。
嵌入式mongo弹簧概述Spring TestContext Framework 提供注解驱动的单元和集成测试支持。 Fongo 是 MongoDB 的内存 Java 实现。 Embedded-mongo-spring 提供了一种在 Spring TestContext Framework 中使用 fgo 的方法...
使用Spring和Reactive Streams Driver连接到MongoDB 10.2.1。使用基于Java的元数据注册MongoClient实例 10.2.2。ReactiveMongoDatabaseFactory接口 10.2.3。使用基于Java的元数据注册ReactiveMongoDatabaseFactory...
SPRING-BOOT-CAMEL-MONGO-JDK8介绍示例 Spring Boot 应用程序,它集成了 Java 生态系统中一些最常用的顶级框架。 该示例还用于试验所有这些框架,以创建轻量级企业服务,该服务独立于外部容器运行,但仍提供企业就绪...
使用自定义了时间和字符串的转换规则 存的时候 存字符串 读取的时候 转换为日期类型 但是在按时间查找的时候 也可以使用 下载后 直接运行 Test类 修改下MongodbConfiguration的mongoUrl 写的时候将时间转为字符串 ...
spring集成shiro 和mongodb数据库 ,下载可用ini配置,启用mongo配置
springcloud-sisyphusspringcloud脚手架ms默认端口说明sisyphus-auth-ms9090鉴权中心sisyphus-auth-api9091openApisisyphus-api-gateway7788网关sisyphus-registry-server7777注册中心sisyphus-config-server8888...
SpringMongoDb 学习和测试 Spring 与 MongoDB 集成的示例项目。 作为先决条件,这需要一个 MongoDB 服务器。 并且可以在 Spring bean“AbstractMongoConfiguration”中配置服务器详细信息。
Apr 19使用Mongo群集的Spring Data Mongo使用已配置的Docker群集的Spring Data Mongo。 并 Jan 19带有Resilience4j和Spring的断路器,使用Reslience4j库的Spring断路器示例。 并 Dec 18 AsyncRestTemplate返回带有...
带有Spring Cloud高级演示项目的微服务 在这个项目中,我将向您展示用于构建基于微服务的体系结构的最有趣的功能,以讨论其他一些方面,例如API文档,配置,测试或存储数据... 在客户端和服务器端使用Spring Cloud Co
Spring Boot示例项目 此回购包含以下示例的mvn spring-boot项目: 包含Spring-Bot JPA和Mongo存储库。 sample带有弹簧启动的内存DB样本中的H2。 具有内存用户和REST Api的Http基本身份验证的Spring安全性。 带有REST...
开发自动配置和使用条件 i. 36.1. 理解auto-configured beans ii. 36.2. 定位auto-configuration候选者 iii. 36.3. Condition注解 i. 36.3.1. Class条件 ii. 36.3.2. Bean条件 iii. 36.3.3. Property条件 iv. 36.3....
在启动时,MongoDB插件将在您的计算机中查找“ mongo”配置属性Config.groovy文件,该文件定义您的MongoDB数据库和相关配置特性。 #Config.groovy mongo{ databases{ server1{ host = "localhost" port = 1234...
SuperBoot框架是基于SpringCloud、SpringBoot敏捷开发框架,框架开发初衷是为了方便快速开发项目,无需关心基础代码的编写,可以更专注于业务本身。框架实现基于JWT Token授权验证,实现单点登录SSO,服务鉴权,实现...
框架提供统一异常处理,统一响应结果,对JPA,Mongo的AOP拦截,由Snowflake和提供调试功能,解决程序员最反感的编写技术文档的问题。 ID自动生成赋值值主键,数据实体无需开发注释由Idea自动生成。增删改查替代基于...
主要给大家介绍了关于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
MongoDB Atlas是经过设计的云托管MongoDB服务,它从您那里抽象到数据库,设置和配置过程的管理。 什么是MongoDB Stitch? MongoDB Stitch提供对MongoDB的完全访问权限,声明性的读/写控件以及与您选择的服务的集成...
该扩展与从UI到mongo / h2嵌入式db上的集成后端创建用户配置文件以及用于路由的组件错误页面ui有关: 。 该项目使用maven spring-boot生成了唯一的jar ,也就是说,您可以实现Java后端服务,以及用打字稿(angular-...
Spring MVC嵌入式码头示例 使用嵌入式Jetty 9服务器的基本Spring MVC 4应用程序。 无xml配置。 包括API REST服务,Freemarker和JSP示例。 与Mongo DB集成。 要求
第1部分:基本的Mongo DB配置和Spring Boot集成在上创建一个MongoDB Atlas帐户: 选择免费套餐: 配置MongoDB集群: 使用任何Cloud Provider和Region创建一个新的Starter Cluster(免费) 向下滚动到“群集名称”,...