项目里MongodbTemplate用法

1. 先引入依赖(这里以gradle项目为例)

java 复制代码
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

2. 在对应应类上获取MongoTemplate

java 复制代码
 private final MongoTemplate mongoTemplate;

3. 下面就是一些常用功能实现

注: 下面的XXX是你的表名

3.1 数据保存

实现1 : 基本数据插入方式1:

java 复制代码
Map<String, Object> map = new HashMap();
map.put("name","test");
Document document = new Document();
document.putAll(map);
Document insert = mongoTemplate.insert(document, XXX);
// 如果需要获取保存后的数据的主键id,则进行下面的操作
String childId = insert.get(MongoKeyConstants.PRIMARY_KEY).toString();

基本数据插入方式2:

java 复制代码
Document doc = new Document();
doc.put("name", "狮子狗");
mongoTemplate.insert(doc, licenseAllocation);

3.2 数据查询
查询一条:

举个栗子: 查询用户名为光头强的数据

java 复制代码
Query query = new Query();
query.addCriteria(Criteria.where("username").is("光头强"));
Document doc = mongoTemplate.findOne(query, Document.class, XXX);

查询多条:

注: 查询后的主键id返回的是一个object对象,所以需要处理一下

java 复制代码
Query query = new Query();
query.addCriteria(Criteria.where("username").is("光头强"));
List<Document> dataList = mongoTemplate.find(query, Document.class, XXX);
// Constants.PRIMARY_KEY 值为  "_id"
dataList.forEach(document -> {
	document.put(MongoKeyConstants.PRIMARY_KEY, t.get(Constants.PRIMARY_KEY).toString());
});

查询条件3: 根据cinInfoId,开始时间和结束时间,以及xx名称模糊查询,进行筛选

注: 1. Constants 里的都是表里的字段

  1. 这里的开始时间和结束时间都是可以单选的,所以需要分开判断
java 复制代码
Query query = new Query();
 query.addCriteria(Criteria.where(MongoKeyConstants.CI_INFO_ID).is(cinInfoId));
 if (searchForm.getUpdateBy() != null) {
     query.addCriteria(Criteria.where(Constants.UPDATED_BY).is(searchForm.getUpdateBy()));
 }
 Date updateStart = searchForm.getUpdateStart();
 Date updateEnd = searchForm.getUpdateEnd();
 if (Objects.nonNull(updateStart) && Objects.nonNull(updateEnd)) {
     query.addCriteria(Criteria.where(Constants.UPDATED_AT).gte(updateStart).lte(updateEnd));
 } else {
     if (updateStart != null) {
         query.addCriteria(Criteria.where(Constants.UPDATED_AT).gte(updateStart));
     }
     if (updateEnd != null) {
         query.addCriteria(Criteria.where(Constants.UPDATED_AT).lte(updateEnd));
     }
 }

 //根据字段名模糊查询
 String updateFieldName = searchForm.getUpdateFieldName();
 if (StringUtils.isNotBlank(updateFieldName)) {
     query.addCriteria(Criteria.where(Constants.CHANGE_CONTENT).elemMatch(Criteria.where("fieldName").is(updateFieldName)));
 }
 //查询
 List<Document> documents = mongoTemplate.find(query, Document.class, XXX);
相关推荐
AllData公司负责人几秒前
AllData数据中台集成开源项目Apache Doris建设实时数仓平台
java·大数据·数据库·数据仓库·apache doris·实时数仓平台·doris集群
白宇横流学长几秒前
助农产品在线交易平台设计与实现【源码+文档】
java
han_hanker12 分钟前
Spring Boot 如何读取 application.yml 作为配置
java·spring boot·后端
Milu_Jingyu13 分钟前
sqlite3_prepare_v2 与 sqlite3_exec 在 SQLite 中的核心区别
java·数据库·sqlite
计算机学姐17 分钟前
基于SpringBoot的充电桩预约管理系统【阶梯电费+个性化推荐+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·mybatis
han_hanker24 分钟前
Spring Boot 配置类注解@Configuration, @Bean
java·spring boot·后端
Chase_______30 分钟前
【JAVA基础指南(四)】快速掌握类和对象 基础篇
android·java·开发语言
可以简单点31 分钟前
spring为什么使用三级缓存而不是两级?
java·spring·缓存
海兰35 分钟前
使用 Spring AI 打造企业级 RAG 知识库第三部分:企业部署与优化
java·人工智能·spring
web前端神器38 分钟前
宝塔服务器网址ERR_CONNECTION_REFUSED报错排查流程
java·linux·服务器