一、SpringBoot 中 MongoDB 的简单使用
(1)pom 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
(2)yml配置
spring:
data:
mongodb:
uri: mongodb://ydt:ydtnb@123.123.123.123:27017/ydt?authSource=ydt
(3)代码
@Resource
private MongoTemplate mongoTemplate;
/**
* 新增数据示例,jl_gps 集合没有会自动创建
*/
public void testSave() {
BJlGps jlGps = new BJlGps();
...
mongoTemplate.save(x, "jl_gps")
}
/**
* 查询数据示例
*/
public void testQuery() {
List<TestEntity> list = new ArrayList();
Query query = new Query();
Criteria criteria = new Criteria();
String dwid = getDwid();
// 模糊查询
criteria.where("dwid").regex("^.*" + dwid + ".*$");
/* 精确查询 */
if (StringUtil.isNotEmpty(type)) {
criteria.and("type").is(type);
}
/* 范围查询 */
if (StringUtil.isNotEmpty(sDate) && StringUtil.isNotEmpty(eDate)) {
criteria.and("dt")
.gte(DateUtil.strToDateLong(sDate))
.lt(DateUtil.strToDateLong(eDate));
}
query.addCriteria(criteria);
// 执行查询,反馈结果集
list = mongoTemplate.find(query, TestEntity.class, "test");
}
二、问题补充(问题提出者:王)
问题一:使用 MongoTemplate 查询数据第一次会比较慢
原因:第一次查询会先建立连接,导致查询慢
解决方案:在项目启动时建立连接
@Component
public class MongoConnTask implements ApplicationRunner {
/**
* Springboot启动时,注入 MongoTemplate ,即可创建连接
*/
@Resource
private MongoTemplate mongoTemplate;
@Override
public void run(ApplicationArguments args) throws Exception {
}
}
问题二:可视化工具中查看时间相关数据,发现与存进去的时间少 8 小时
原因:MongoDB 存储时间为标准时间,UTC +0:00。中国标准时间为 UTC +8:00。
解决方案:无需解决
MongoTemplate 在取数据时,会自动加 8H,保证存取一致。