SpringBoot MongoDB操作封装
1.引入Jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
2.MongoDbHelper操作
/*** MongoDB Operation class* @author Mr.Li* @date 2022-12-05*/
public class MongoDbHelper {@Autowiredprivate MongoTemplate mongoTemplate;/*** Save Individual Objects** @param t* @param <T>* @return*/public <T> T save(T t) {return mongoTemplate.insert(t);}/*** Store the object to the specified collectionName* @param objectToSave* @param collectionName* @param <T>* @return*/public <T> T save(T objectToSave, String collectionName){return mongoTemplate.insert(objectToSave,collectionName);}/*** Batch save track data** @param list* @param collectionName* @return*/public <T> Collection<T> batchSave(Collection<T> list, String collectionName) {return mongoTemplate.insert(list,collectionName);}/*** Query Data** @param query* @param tClass* @param <T>* @return*/public <T> List<T> find(Query query, Class<T> tClass) {return mongoTemplate.find(query, tClass);}/*** Collection specified by query data** @param query* @param tClass* @param <T>* @return*/public <T> List<T> find(Query query, Class<T> tClass, String collectionName) {return mongoTemplate.find(query, tClass,collectionName);}/*** Pagination query* @param query query criteria* @param pageNum Current Page* @param pageSize Number of entries per page* @param sortField Sorted Field* @param sortType 1:asc;0:desc* @param tClass to class* @param collectionName collection name* @param <T>* @return*/public <T> MongoPage findByPage(Query query,int pageNum,int pageSize,String sortField,int sortType, Class<T> tClass, String collectionName) {int count = (int) mongoTemplate.count(query, tClass, collectionName);if(sortType==1){query.with(Sort.by(Sort.Order.asc(sortField)));}else {query.with(Sort.by(Sort.Order.desc(sortField)));}//Set starting numberquery.skip((pageNum - 1) * pageSize);//Set the number of queriesquery.limit(pageSize);//Query the current page data setList<T> taskList = mongoTemplate.find(query, tClass,collectionName);int size=count % pageSize == 0 ? count / pageSize : count / pageSize + 1;MongoPage page=new MongoPage();page.setTotal(count);page.setSize(size);page.setData(taskList);return page;}/*** 查询前几条数据* @param query* @param limitNum 前几条* @param sortField 排序字段* @param sortType 0:倒序;1:正序* @param tClass* @param collectionName* @param <T>* @return*/public <T> List<T> findTop(Query query,Integer limitNum,String sortField,int sortType, Class<T> tClass, String collectionName){if(sortType==1){query.with(Sort.by(Sort.Order.asc(sortField)));}else {query.with(Sort.by(Sort.Order.desc(sortField)));}query.limit(limitNum);return mongoTemplate.find(query, tClass,collectionName);}/*** 查询一条数据* @param query* @param sortField* @param sortType* @param tClass* @param collectionName* @param <T>* @return*/public <T> List<T> findOne(Query query,String sortField,int sortType, Class<T> tClass, String collectionName){if(sortType==1){query.with(Sort.by(Sort.Order.asc(sortField)));}else {query.with(Sort.by(Sort.Order.desc(sortField)));}//Set the number of queriesquery.limit(1);//Query the current page data setList<T> taskList = mongoTemplate.find(query, tClass,collectionName);return taskList;}/*** Query All** @param tClass* @param <T>* @return*/public <T> List<T> findAll(Class<T> tClass) {return mongoTemplate.findAll(tClass);}/*** Query all specified collections** @param tClass* @param collectionName* @param <T>* @return*/public <T> List<T> findAll(Class<T> tClass,String collectionName) {return mongoTemplate.findAll(tClass,collectionName);}/*** create collection* @param collName* @param indexList* @return*/public boolean createCollection(String collName, List<Map<String,Integer>> indexList){try {if (mongoTemplate.collectionExists(collName)) {return true;}//Index collection to be createdList<IndexModel> indexModels = new ArrayList<>();for (Map<String, Integer> indexMap : indexList) {BasicDBObject index = new BasicDBObject();for (String key : indexMap.keySet()) {index.put(key, indexMap.get(key));}indexModels.add(new IndexModel(index));}mongoTemplate.createCollection(collName).createIndexes(indexModels);return true;}catch (Exception e){return false;}}/*** Update the first result set returned by the query* @param query* @param update* @param collectionName* @return*/public boolean updateFirst(Query query, Update update, String collectionName){try {mongoTemplate.updateFirst(query, update, collectionName);return true;}catch (Exception e){return false;}}/*** Update all returned result sets* @param query* @param update* @param collectionName* @return*/public boolean updateMulti(Query query, Update update, String collectionName){try {mongoTemplate.updateMulti(query, update, collectionName);return true;}catch (Exception e){return false;}}/*** If the update object does not exist, add it* @param query* @param update* @param tClass* @param <T>* @param collectionName* @return*/public <T> boolean upsert(Query query, Update update, Class<T> tClass,String collectionName){try {mongoTemplate.upsert(query, update, tClass,collectionName);return true;}catch (Exception e){return false;}}/*** 存在则更新不存在则创建* @param query* @param update* @param collectionName* @return*/public boolean upsert(Query query, Update update, String collectionName){try {mongoTemplate.upsert(query, update,collectionName);return true;}catch (Exception e){return false;}}/*** 汇总查询* @param aggregation* @param tClass* @param collectionName* @param <T>* @return*/public <T> List<T> groupQuery(Aggregation aggregation,Class<T> tClass,String collectionName){AggregationResults<T> maps = mongoTemplate.aggregate(aggregation, collectionName, tClass);return maps.getMappedResults();}/*** 查总条数* @param query* @param collectionName* @return*/public long queryCount(Query query, String collectionName){return mongoTemplate.count(query, collectionName);}
}
3.分页实体类MongoPage
/*** MongoDB paged query returns result set* @author Mr.Li* @date 2023-01-11*/
@Data
public class MongoPage {/*** Total number of data*/private Integer total;/*** Page count*/private Integer size;/*** Data result set per page*/private Object data;
}
相关文章:
SpringBoot MongoDB操作封装
1.引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency> 2.MongoDbHelper操作 /*** MongoDB Operation class* author Mr.Li* date 2022-12-05*…...
PyTorch 模型性能分析和优化 — 第 1 部分
一、说明 这篇文章的重点将是GPU上的PyTorch培训。更具体地说,我们将专注于 PyTorch 的内置性能分析器 PyTorch Profiler,以及查看其结果的方法之一,即 PyTorch Profiler TensorBoard 插件。 二、深度框架 训练深度学习模型,尤其是…...
Unity3D 简易音频管理器
依赖于Addressable 依赖于单例模板:传送门 using System.Collections.Generic; using System.Security.Cryptography; using System; using UnityEngine; using UnityEngine.AddressableAssets;namespace EasyAVG {public class AudioManager : MonoSingleton<…...
【李沐深度学习笔记】线性回归
课程地址和说明 线性回归p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 线性回归 如何在美国买房(经典买房预测问题) 一个简化的模型 线性模型 其中, x → [ x 1 , x 2 ,…...
微信收款码费率0.38太坑了
作为一个有多年运营经验的商家,我本人在申请收款功能时曾经走过了不少弯路。我找遍了市面上的知名的支付公司,但了解到的收款手续费率通常都在0.6左右,最低也只能降到0.38。这个过程吃过不少苦头。毕竟,收款功能是我们商家的命脉&…...
【学习笔记】CF1103D Professional layer
首先分析不出啥性质,所以肯定是暴力优化😅 常见的暴力优化手段有均摊,剪枝,数据范围分治(points),答案值域分析之类的。 比较经典的题目是 CF1870E Another MEX Problem,可以用剪枝…...
vue之Pinia
定义 Store | Pinia 开发文档 1.什么是Pinaia Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。 2.理解Pinaia核心概念 定义Store 在深入研究核心概念之前,我们得知道 Store 是用 defineStore() 定义的,它的第一个参数要求是一…...
antd-vue 级联选择器默认值不生效解决方案
一、业务场景: 最近在使用Vue框架和antd-vue组件库的时候,发现在做编辑回显时** 级联选择器** 组件的默认值不生效。为了大家后面遇到和我一样的问题,给大家分享一下 二、bug信息: 三、问题原因: 确定不了唯一的值&a…...
分享53个Python源码源代码总有一个是你想要的
分享53个Python源码源代码总有一个是你想要的 链接:https://pan.baidu.com/s/1ew3w2_DXlSBrK7Mybx3Ttg?pwd8888 提取码:8888 项目名称 100-Python ControlXiaomiDevices DRF-ADMIN 后台管理系统 FishC-Python3小甲鱼 Flask框架的api项目脚手架 …...
【每日一题】658. 找到 K 个最接近的元素
658. 找到 K 个最接近的元素 - 力扣(LeetCode) 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。 整数 a 比整数 b 更接近 …...
并发任务队列(字节青训测试题)
需求描述 封装一个并发任务队列类,用于对一些异步任务按指定的并发数量进行并发执行。 /*** 延迟函数* param {number} time - 延迟时间* return {Promise} delayFn - 延迟函数(异步封装)*/ function timeout(time) {return new Promise((resolve) > {setTimeo…...
Ubuntu 安装Nacos
1、官网下载最新版nacos https://github.com/alibaba/nacos/releases 本人环境JDK8,Maven3.6.3,启动Nacos2.2.1启动失败,故切换到2.1.0启动成功 2、放到服务器目录下,我的在/home/xxx/apps下 3、解压 $ tar -zxvf nacos-serve…...
CSS 小球随着椭圆移动
html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…...
【李沐深度学习笔记】线性代数
课程地址和说明 线性代数p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 线性代数 标量 标量(scalar),亦称“无向量”。有些物理量,只具有数值大小,…...
vuejs - - - - - 递归组件的实现
递归组件的实现 1. 需求描述:2. 效果图:3. 代码3.1 封装组件代码3.2 父组件使用 1. 需求描述: 点击添加行,增加一级目录结构当类型为object or array时,点击右侧➕,增加子集点击右侧🚮&#x…...
精准对接促合作:飞讯受邀参加市工信局举办的企业供需对接会
2023年9月21日,由惠州市工业和信息化局主办的惠州市工业软件企业与制造业企业供需对接会成功举办,对接会旨在促进本地工业软件企业与制造业企业的紧密合作,推动数字化转型的深入发展。此次会议在市工业和信息化局16楼会议室举行,会…...
数学建模之遗传算法
文章目录 前言遗传算法算法思想生物的表示初始种群的生成下一代种群的产生适应度函数轮盘赌交配变异混合产生新种群 停止迭代的条件遗传算法在01背包中的应用01背包问题介绍01背包的其它解法01背包的遗传算法解法生物的表示初始种群的生成下一代种群的产生适应度函数轮盘赌交配…...
ISO9001认证常见的不符合项
今天,整理了一些关于ISO9001质量管理体系审核最常见的不合格项,以供大家参考。 一、质量管理体系 1、质量手册(标准条款4.2.2) (1)各部门执行的文件与手册的规定不一致。 (2)质量…...
crypto:看我回旋踢
题目 下载压缩包后解压可得到提示文本 经过观察,synt{}这个提示与flag{}形式很像 由题目名中的回旋可以推测为凯撒密码,由凯撒密码的定义可知,需要先推出移位数,s->f数13次,因此移位数为13,解码可得...
Springcloud实战之自研分布式id生成器
一,背景 日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID 对应且仅对应 一个订单。我们现实生活中也有各种 ID ,比如身…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
