当前位置: 首页 > news >正文

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;
}

http://www.lryc.cn/news/175343.html

相关文章:

  • PyTorch 模型性能分析和优化 — 第 1 部分
  • Unity3D 简易音频管理器
  • 【李沐深度学习笔记】线性回归
  • 微信收款码费率0.38太坑了
  • 【学习笔记】CF1103D Professional layer
  • vue之Pinia
  • antd-vue 级联选择器默认值不生效解决方案
  • 分享53个Python源码源代码总有一个是你想要的
  • 【每日一题】658. 找到 K 个最接近的元素
  • 并发任务队列(字节青训测试题)
  • Ubuntu 安装Nacos
  • CSS 小球随着椭圆移动
  • 【李沐深度学习笔记】线性代数
  • vuejs - - - - - 递归组件的实现
  • 精准对接促合作:飞讯受邀参加市工信局举办的企业供需对接会
  • 数学建模之遗传算法
  • ISO9001认证常见的不符合项
  • crypto:看我回旋踢
  • Springcloud实战之自研分布式id生成器
  • java 企业工程管理系统软件源码 自主研发 工程行业适用
  • Spring Cloud Alibaba Nacos 2.2.3 (4) - 本地源码编译 调试
  • WKB近似
  • LeetCode算法二叉树—108. 将有序数组转换为二叉搜索树
  • 如何设置 Git 短命令
  • virtualbox无界面打开linux虚拟机的bat脚本,以及idea(代替Xshell)连接linux虚拟机的方法
  • mockito 的 InjectMocks 和 Mock 有什么区别?
  • 网络工程师的爬虫技术之路:跨界电商与游戏领域的探索
  • 【TCP】确认应答 与 超时重传
  • Kubernetes中Pod的扩缩容介绍
  • vue点击pdf文件直接在浏览器中预览文件