【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理

【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理

1.引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mongodb ↓ --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!-- mongodb ↑ -->

2.配置application.yml

spring:data:# mongodb多数据源配置mongodb:host: 192.168.36.238port: 27017username: yapipassword: Qsxdcfr2313!database: yapi# 验证数据库authentication-database: admin# 第二个数据库low-code:uri: mongodb://yapi:Qsxdcfr2313!@192.168.36.238:27017/low-code?authSource=admin# 第三个数据库event:uri: mongodb://yapi:Qsxdcfr2313!@192.168.36.238:27017/event?authSource=admin

3.MongoDB多数据源配置

创建MongoConfig类

package com.xhs.config;import com.mongodb.client.MongoClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;import javax.annotation.Resource;/*** @desc: MongoDB多数据源配置* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 16:06:22* @version: JDK 1.8*/@Configuration
public class MongoConfig {@Resourceprivate MongoClient mongoClient;@Resourceprivate MongoProperties mongoProperties;/*** 默认的数据库** @return MongoTemplate*/@Beanpublic MongoTemplate mongoTemplate() {return new MongoTemplate(mongoClient, mongoProperties.getDatabase());}/*** 第二个数据源** @param adminUri uri* @return MongoTemplate*/@Beanpublic MongoTemplate mongoTemplateLowCode(@Value("${spring.data.mongodb.low-code.uri}") String adminUri) {return new MongoTemplate(new SimpleMongoClientDatabaseFactory(adminUri));}/*** 第三个数据源** @param adminUri uri* @return MongoTemplate*/@Beanpublic MongoTemplate mongoTemplateEvent(@Value("${spring.data.mongodb.event.uri}") String adminUri) {return new MongoTemplate(new SimpleMongoClientDatabaseFactory(adminUri));}
}

4.创建实体类

创建三个库的实体类

第一库的实体类

package com.xhs.entity.mongo;import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;/*** @desc: yapi库的user集合* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 023 16:14* @version: JDK 1.8*/
@Data
@Document(collection = "user")
public class User {@Idprivate String id;/*** 用户名*/private String username;/*** 角色*/private String role;
}

第二个库的实体类

package com.xhs.entity.mongo;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;import java.util.Date;/*** @desc: low-code库的low_code_url集合* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 023 16:10* @version: JDK 1.8*/
@Data
@Document(collection = "low_code_url")
public class LowCodeUrl {@Idprivate String id;/*** 系统类型*/private String systemName;/*** 对象名称*/private String objectName;/*** 接口地址*/private String interfaceUrl;/*** 接口类型*/private String interfaceType;/*** 创建时间*/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;/*** 更新时间*/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;
}

第三个库的实体类

package com.xhs.entity.mongo;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;import java.util.Date;/*** @desc: event库的event集合* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 023 16:17* @version: JDK 1.8*/
@Data
@Document(collection = "event")
public class Event {@Idprivate String id;/*** 事件名称*/private String eventName;/*** 事件类型*/private String eventType;/*** 触发方式*/private String triggerMode;/*** 创建时间*/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;/*** 更新时间*/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;
}

5.创建Controller层

package com.xhs.controller;import com.xhs.dto.request.AddEventParams;
import com.xhs.dto.request.AddLowCodeUrlParams;
import com.xhs.dto.request.FindLowCodeUrlParams;
import com.xhs.dto.request.PageEventParams;
import com.xhs.message.ReturnResult;
import com.xhs.service.MongoService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;/*** @desc:* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 023 16:19* @version: JDK 1.8*/
@RestController
@RequestMapping("/mongo")
public class MongoController {@Resourceprivate MongoService mongoService;/*** 查询所有用户** @return ReturnResult<Object>*/@GetMapping("/getUser")public ReturnResult<Object> getUser() {return mongoService.getUser();}/*** 条件查询 LowCodeUrl** @param findLowCodeUrlParams 查询条件* @return ReturnResult<Object>*/@PostMapping("/getLowCodeUrl")public ReturnResult<Object> getLowCodeUrl(@RequestBody FindLowCodeUrlParams findLowCodeUrlParams) {return mongoService.getLowCodeUrl(findLowCodeUrlParams);}/*** 新增 LowCodeUrl 数据** @param lowCodeUrlParams LowCodeUrl 数据* @return ReturnResult<Object>*/@PostMapping("/addLowCodeUrl")public ReturnResult<Object> addLowCodeUrl(@Validated @RequestBody AddLowCodeUrlParams lowCodeUrlParams) {return mongoService.addLowCodeUrl(lowCodeUrlParams);}/*** 新增 event 数据** @param eventParams LowCodeUrl 数据* @return ReturnResult<Object>*/@PostMapping("/addEvent")public ReturnResult<Object> addEvent(@Validated @RequestBody AddEventParams eventParams) {return mongoService.addEvent(eventParams);}/*** 分页查询 event 数据** @param eventParams 查询条件* @return ReturnResult<Object>*/@PostMapping("/pageEvent")public ReturnResult<Object> pageEvent(@Validated @RequestBody PageEventParams eventParams) {return mongoService.pageEvent(eventParams);}
}

6.创建Service层

package com.xhs.service;import com.xhs.dto.request.AddEventParams;
import com.xhs.dto.request.AddLowCodeUrlParams;
import com.xhs.dto.request.FindLowCodeUrlParams;
import com.xhs.dto.request.PageEventParams;
import com.xhs.message.ReturnResult;/*** @desc:* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 023 16:20* @version: JDK 1.8*/
public interface MongoService {/*** 查询所有用户** @return ReturnResult<Object>*/ReturnResult<Object> getUser();/*** 条件查询 LowCodeUrl** @param findLowCodeUrlParams 查询条件* @return ReturnResult<Object>*/ReturnResult<Object> getLowCodeUrl(FindLowCodeUrlParams findLowCodeUrlParams);/*** 新增 LowCodeUrl 数据** @param lowCodeUrlParams LowCodeUrl 数据* @return ReturnResult<Object>*/ReturnResult<Object> addLowCodeUrl(AddLowCodeUrlParams lowCodeUrlParams);/*** 新增 event 数据** @param eventParams LowCodeUrl 数据* @return ReturnResult<Object>*/ReturnResult<Object> addEvent(AddEventParams eventParams);/*** 分页查询 event 数据** @param eventParams 查询条件* @return ReturnResult<Object>*/ReturnResult<Object> pageEvent(PageEventParams eventParams);
}

7.创建ServiceImpl层

package com.xhs.service.impl;import com.xhs.dto.request.AddEventParams;
import com.xhs.dto.request.AddLowCodeUrlParams;
import com.xhs.dto.request.FindLowCodeUrlParams;
import com.xhs.dto.request.PageEventParams;
import com.xhs.dto.response.PageResult;
import com.xhs.entity.mongo.Event;
import com.xhs.entity.mongo.LowCodeUrl;
import com.xhs.entity.mongo.User;
import com.xhs.message.Result;
import com.xhs.message.ReturnResult;
import com.xhs.service.MongoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;import javax.annotation.Resource;
import java.util.Date;
import java.util.List;/*** @desc:* @projectName: spring-boot-demo* @author: xhs* @date: 2023-11-23 023 16:20* @version: JDK 1.8*/
@Slf4j
@Service
public class MongoServiceImpl implements MongoService {@Resource@Qualifier("mongoTemplate")private MongoTemplate mongoTemplate;@Resource@Qualifier("mongoTemplateLowCode")private MongoTemplate mongoTemplateLowCode;@Resource@Qualifier("mongoTemplateEvent")private MongoTemplate mongoTemplateEvent;/*** 查询所有用户** @return ReturnResult<Object>*/@Overridepublic ReturnResult<Object> getUser() {List<User> users = mongoTemplate.find(new Query(), User.class);return ReturnResult.build(Result.QUERY_SUCCESS).setData(users);}/*** 条件查询 LowCodeUrl** @param findLowCodeUrlParams 查询条件* @return ReturnResult<Object>*/@Overridepublic ReturnResult<Object> getLowCodeUrl(FindLowCodeUrlParams findLowCodeUrlParams) {Query query = new Query();if (StringUtils.hasLength(findLowCodeUrlParams.getSystemName())) {// regex 模糊查询query.addCriteria(Criteria.where("systemName").regex(findLowCodeUrlParams.getSystemName()));}if (StringUtils.hasLength(findLowCodeUrlParams.getObjectName())) {// regex 模糊查询query.addCriteria(Criteria.where("objectName").regex(findLowCodeUrlParams.getObjectName()));}if (StringUtils.hasLength(findLowCodeUrlParams.getInterfaceType())) {query.addCriteria(Criteria.where("interfaceType").is(findLowCodeUrlParams.getInterfaceType()));}List<LowCodeUrl> lowCodeUrlList = mongoTemplateLowCode.find(query, LowCodeUrl.class);return ReturnResult.build(Result.QUERY_SUCCESS).setData(lowCodeUrlList);}/*** 新增 LowCodeUrl 数据** @param lowCodeUrlParams LowCodeUrl 数据* @return ReturnResult<Object>*/@Override@Transactional(rollbackFor = Exception.class)public ReturnResult<Object> addLowCodeUrl(AddLowCodeUrlParams lowCodeUrlParams) {Date date = new Date();LowCodeUrl codeUrl = new LowCodeUrl();codeUrl.setSystemName(lowCodeUrlParams.getSystemName());codeUrl.setObjectName(lowCodeUrlParams.getObjectName());codeUrl.setInterfaceUrl(lowCodeUrlParams.getInterfaceUrl());codeUrl.setInterfaceType(lowCodeUrlParams.getInterfaceType());codeUrl.setCreateTime(date);codeUrl.setUpdateTime(date);LowCodeUrl insert = mongoTemplateLowCode.insert(codeUrl);return ReturnResult.build(Result.ADD_SUCCESS).setData(insert.getId());}/*** 新增 event 数据** @param eventParams LowCodeUrl 数据* @return ReturnResult<Object>*/@Overridepublic ReturnResult<Object> addEvent(AddEventParams eventParams) {Date date = new Date();Event event = new Event();event.setEventName(eventParams.getEventName());event.setEventType(eventParams.getEventType());event.setTriggerMode(eventParams.getTriggerMode());event.setCreateTime(date);event.setUpdateTime(date);Event insert = mongoTemplateEvent.insert(event);return ReturnResult.build(Result.ADD_SUCCESS).setData(insert.getId());}/*** 分页查询 event 数据** @param eventParams 查询条件* @return ReturnResult<Object>*/@Overridepublic ReturnResult<Object> pageEvent(PageEventParams eventParams) {// 排序字段Sort sort = Sort.by(Sort.Direction.DESC, "createTime");// 分页,PageNumber()-1是因为第一页的下标为0 ,入参PageNumber最小值为1Pageable pageRequest = PageRequest.of(eventParams.getPageNumber()-1, eventParams.getPageSize(), sort);// 查询条件Query query = new Query();if (StringUtils.hasLength(eventParams.getEventName())) {// regex 模糊查询query.addCriteria(Criteria.where("eventName").regex(eventParams.getEventName()));}if (StringUtils.hasLength(eventParams.getEventType())) {// regex 模糊查询query.addCriteria(Criteria.where("eventType").regex(eventParams.getEventType()));}if (StringUtils.hasLength(eventParams.getTriggerMode())) {// regex 模糊查询query.addCriteria(Criteria.where("triggerMode").regex(eventParams.getTriggerMode()));}query.with(pageRequest);// 查询总数long count = mongoTemplateEvent.count(query, Event.class);// 查询数据List<Event> events = mongoTemplateEvent.find(query, Event.class);// 分页结果PageResult<List<Event>> result = new PageResult<>();result.setPageNumber(eventParams.getPageNumber());result.setPageSize(eventParams.getPageSize());result.setTotalRow(count);result.setRecords(events);return ReturnResult.build(Result.QUERY_SUCCESS).setData(result);}
}

8.源码地址

https://gitee.com/xhs101/spring-boot-demo

9.查询效果:

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/219432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习第3天:CNN卷积神经网络

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 介绍 CNN的主要结构 卷积层 激励层 池化层 Kears搭建CNN 搭建代码 直观感受卷积的作用 结语 介绍 卷积神经网络&#xff08;Convol…

机器学习基础Matplotlib绘图

一、运行环境 学习工具&#xff1a;jupyter-notebookpython版本&#xff1a;311系统&#xff1a;Win11 二、什么是matplotlib&#xff1f; matplotlib是基于python生态开发的一个可视化绘图库&#xff0c;它的出现让python在数据分析及机器学习方面占了重要的一部分&#…

lv11 嵌入式开发 C工程与寄存器封装 10

目录 1 C语言工程介绍 1.1 工程模板介绍 1.2 启动代码分析 2 C语言实现LED实验 2.1 C语言如何实现寄存器读写 2.2 实现LED实验 2.3 练习 1 C语言工程介绍 1.1 工程模板介绍 工程目录&#xff0c;后续代码都会利用到这个目录 interface.c 写了一个main函数的框架 int …

2018年4月26日 Go生态洞察:Go新品牌形象及标识发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

三轴加速度计LIS2DW12开发(1)----轮询获取加速度数据

STM32WB55开发.6--FUS更新 概述视频教学通信模式管脚定义IIC通信模式速率生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置传感器的量程配置过滤器链配置电源模式设置输出数据速率轮询获取加速度演示 概述 本文将介绍如何驱…

智能优化算法应用:基于斑点鬣狗算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于斑点鬣狗算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于斑点鬣狗算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑点鬣狗算法4.实验参数设定5.算法结果6.参考…

Blender学习--模型贴图傻瓜级教程

Blender 官方文档 1. Blender快捷键&#xff1a; 快捷键说明 按住鼠标滚轮&#xff1a;移动视角Tab&#xff1a;切换编辑模式和物体模式鼠标右键&#xff1a; 编辑模式&#xff1a; 物体模式&#xff1a; 其他&#xff1a; 2. 下面做一个球体贴一张纹理的操作 2.1 效果如下…

【Python百宝箱】Python项目生态圈:虚拟环境全指南

项目管理达人&#xff1a;Python虚拟环境的智慧选择 前言 在Python开发领域&#xff0c;创建虚拟环境是一项至关重要的任务&#xff0c;它有助于项目之间的依赖隔离&#xff0c;确保每个项目都能独立运行且使用特定的库和工具。本文将介绍多种创建Python虚拟环境的方法&#…

C# APS.NET CORE 6.0 WEB API IIS部署

1.创建 APS.NET CORE6.0 WEB API项目 默认选项即可 源代码&#xff1a; 项目文件展开&#xff1a; launchSettings.json {"$schema": "https://json.schemastore.org/launchsettings.json","iisSettings": {"windowsAuthentication"…

阿里元境亮相第八届世界物联网大会,分享元计算对数字文旅的创新赋能

2023&#xff08;第八届&#xff09;世界物联网大会于11月20日在中国北京隆重开幕。联合国秘书长安东尼奥古特雷斯在开幕式发表书面致辞时特别提到&#xff1a;“在一个相互连接的世界&#xff0c;你们的主题‘新物联、新经济、新时代’是数字技术影响力的见证”。 11月21日上午…

扫码点餐小程序的效果如何

扫码点餐是餐饮商家常用的方式&#xff0c;其可以帮助商家更好更快的服务到店客户及节省商家点餐、加菜、汇总结算的时间及人力成本。 通过【雨科】平台搭建餐饮扫码点餐小程序&#xff0c;客户进店用小程序扫描桌码即可开始点餐&#xff0c;确认菜单信息后打印小票提交到厨房…

电源的纹波

电源纹波的产生 我们常见的电源有线性电源和开关电源&#xff0c;它们输出的直流电压是由交流电压经整流、滤波、稳压后得到的。由于滤波不干净&#xff0c;直流电平之上就会附着包含周期性与随机性成分的杂波信号&#xff0c;这就产生了纹波。 在额定输出电压、电流的情况下…