整合前看项目中spring版本,选择对应的mongodb依赖
spring-data-mongodb版本:1.10.8.RELEASE
spring版本:4.3.12.RELEASE
spring-data-mongodb版本:1.10.8.RELEASE
mongo-java-driver版本:2.14.3
配置如下:
<mongo:repositories base-package="xxx.xxx.repository" />
<!-- MongoDB host -->
<mongo:mongo host="localhost/ip" port="27017"/>
<!-- Template for performing MongoDB operations -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"
c:mongo-ref="mongo" c:databaseName="dbName"/>
包路径xxx.xxx.repository是继承MongoRepository接口的接口路径,不需要写实现,程序运行会自动生成代理对象,这个被代理对象类型就是SimpleMongoRepository
public interface MongoService extends MongoRepository<DB对象, 主键类型> {
}
MongoRepository
MongoRepository中默认方法可以直接使用,恶心的条件查询的时候没有时间范围的查询设置
TrackRecord trackRecord = new TrackRecord();
// 这里设置的属性都会当成“等于”的条件
trackRecord.setUserId(userId);
trackRecord.setCreateTime(DateUtils.parseDate(LocalDate.now()));
list = mongoService.findAll(Example.of(trackRecord,
ExampleMatcher.matching().withIgnoreNullValues()
//.withMatcher("createTime", ExampleMatcher.GenericPropertyMatchers.regex())
.withIgnorePaths("_id","_class")),
new Sort(new Sort.Order(Sort.Direction.DESC, "createTime")));
为此查询了源码,它的实现是SimpleMongoRepository,这个类中有两个属性:
private final MongoOperations mongoOperations; private final MongoEntityInformation<T, ID> entityInformation;
MongoOperations也是一个接口,它的实现就MongoTemplate,看到这感觉MongoRepository是MongoTemplate的一个包装,应该更方便强大一点,但是
它的查询方法只有一个Query对象参数的,还是一个私有的,不能直接调用,其它的分页和迭代不适合我用,参数只有Example,它有下面两个参数
private final @NonNull T probe; private final @NonNull ExampleMatcher matcher;
T 参数就是DB定义对象,设置什么属性查询的适合就会加什么条件,时间是大于小于的范围,这就毙掉了不能用
ExampleMatcher参数是设置怎么使用使用那些属性,可以忽略空值,模糊查询(以什么开头和结尾)
mongoTemplate
但是mongoTemplate可以:
Query query = new Query();
query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "createTime")));
Criteria criteria = new Criteria();
criteria.and("userId").is(userId);
criteria.and("createTime").gte(DateUtils.parseDate(LocalDate.now())).lte(DateUtils.parseDate(LocalDate.now().plusDays(1)));
query.addCriteria(criteria);
list = mongoTemplate.find(query, TrackRecord.class);
spring-data-mongodb版本:3.2.0
spring-data-mongodb版本比较新的时候配置就不一样了,从哪个版本开始更新的我没找
spring-data-mongodb版本:3.2.0
这个版本的配置
<mongo:mongo-client id="mongoClient" host="localhost" port="27017">
<!--<mongo:client-settings read-concern="" write-concern=""/>-->
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="track" mongo-client-ref="mongoClient"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" >
<constructor-arg ref="mongoDbFactory" />
</bean>
client-settings里可配置一些优化属性