mongoTemplate的lambda写法

1、介绍

Mogo使用简单易懂的lambda操作mongoDb中的集合(Mogo名字乱敲的)

mongoDb对于一般的常用软件来说应该都不陌生了,相信使用过MP(mybatisPlus)的小伙伴都知道lambda形式的操作是多么的爽了,但是mongoTemplate用起来确实很令人脑壳疼,所以脑袋一热就参考了mp做了一个类似的封装,让我自己远离恶心的Criteria,周末肝出来的第一版,比较简陋,但是CRUD都可以正常使用,提供思想,希望有大佬带飞,期待有个好用的Mongo ORM

2、使用说明

初期项目主要有三个模块:

  1. mogo(基础的封装)
  2. mogo-gen (提供的简单版代码生成器)
  3. mogo-web (暴露出去的http测试模块)

基础用法

   /*** lambda形式的mongoTemplate用法* 分页获取测试数据*/public APiResponsePage<UserInfoResp, Object> queryList(UserPageReq req) {LambdaQueryWrapper<User> query = Wrappers.<User>lambdaQuery().eq(Objects.nonNull(req.getAge()), User::getAge, req.getAge()).eq(Objects.nonNull(req.getLoginName()), User::getLoginName, req.getLoginName()).eq(Objects.nonNull(req.getPassWord()), User::getPassWord, req.getPassWord()).eq(Objects.nonNull(req.getAge()), User::getAge, req.getAge()).between((Objects.nonNull(req.getStartTime()) && Objects.nonNull(req.getEndTime())), User::getCreateTime, req.getStartTime(), req.getEndTime());Page<User> page = userService.page(query, req.getPageNo(), req.getPageSize());return APiResponsePage.okPage(page, UserInfoResp.class);}

写法对比

 public Mogo getByMongoTemplate(Long age) {Criteria total = new Criteria();Criteria temp = new Criteria();// select * from mogo where age = 0 and (name='lusir' or name = 'sss' or (name='loser' and age = 0)) and name = 'loser'Criteria criteria1 = Criteria.where("age").is(age);Criteria criteria2 = new Criteria().orOperator(Criteria.where("name").is("lusir"),Criteria.where("name").is("sss"),temp.andOperator(Criteria.where("name").is("loser"), Criteria.where("age").is(age)));Criteria criteria3 = Criteria.where("name").is("loser");total.andOperator(criteria1, criteria2, criteria3);Query query = new Query(total);query.with(Sort.by(Collections.singletonList(Sort.Order.asc("_id"))));return mongoTemplate.findOne(query, Mogo.class);}public Mogo getByMogo(Long age) {// select * from mogo where age = 0 and (name='lusir' or name = 'sss' or (name='loser' and age = 0)) and name = 'loser'LambdaQueryWrapper<Mogo> queryWrapper = Wrappers.<Mogo>lambdaQuery().eq(Mogo::getAge, age).and(tem ->tem.eq(Mogo::getName, "lusir").or().eq(Mogo::getName, "sss").or().and(x -> x.eq(Mogo::getName, "loser").eq(Mogo::getAge, age))).eq(Mogo::getName, "loser");Mogo one = getOne(queryWrapper);if (Objects.nonNull(one)) {return one;}Mogo mogo = new Mogo();mogo.setId(System.currentTimeMillis());return mogo;}

3、核心接口

package com.loser.core.sdk;import com.loser.core.entity.Page;
import com.loser.core.wrapper.LambdaQueryWrapper;import java.io.Serializable;
import java.util.Collection;
import java.util.List;/*** mongo 3、基础方法接口** @author loser* @date 2023-02-04  18:52*/
public interface MogoService<T> {/*** 查询单条数据** @param queryWrapper 条件构造器* @return 查询到的集合数据*/T getOne(LambdaQueryWrapper<T> queryWrapper);/*** 保存新的数据** @param entity 需要保存的实体* @return 是否保存成功*/boolean save(T entity);/*** 批量保存新的数据 内部递归调用单个保存** @param entityList 需要保存的数据列表* @return 是否保存成功*/boolean saveBatch(Collection<T> entityList);/*** 通过ID删除数据** @param id 数据ID* @return 是否删除成功*/boolean removeById(Serializable id);/*** 通过条件构建器删除数据** @param queryWrapper 条件构建器* @return 是否删除成功*/boolean remove(LambdaQueryWrapper<T> queryWrapper);/*** 通过ID更新数据 只有存在数据的字段才会更新** @param entity 需要更新的数据* @return 是否更新成功*/boolean updateById(T entity);/*** 通过条件构造器更新数据 只有存在数据的字段才会更新** @param entity       需要更新的数据* @param queryWrapper 条件构建起* @return 是否更新成功*/boolean update(T entity, LambdaQueryWrapper<T> queryWrapper);/*** 通过ID获取数据** @param id 数据ID* @return 集合中的数据*/T getById(Serializable id);/*** 通过数据ID集合获取数据集合** @param idList 数据ID集合* @return 查询到的数据集合*/Collection<T> listByIds(Collection<? extends Serializable> idList);/*** 通过条件构建起统计数据量** @param queryWrapper 条件构建起* @return 数据两*/long count(LambdaQueryWrapper<T> queryWrapper);/*** 通过条件构建起查询列表** @param queryWrapper 条件构建器* @return 数据集合*/List<T> list(LambdaQueryWrapper<T> queryWrapper);/*** 通过条件构建起进行分页查询** @param queryWrapper 条件构建器* @param pageNo       页面* @param pageSize     页面大小* @return 分页对象*/Page<T> page(LambdaQueryWrapper<T> queryWrapper, int pageNo, int pageSize);/*** 通过条件构建器判断是否存在数据** @param queryWrapper 条件构建器* @return 是否存在数据*/boolean exist(LambdaQueryWrapper<T> queryWrapper);}

源码地址

类似mybataisPlus的mongoDb的orm相关推荐

  1. MongoDB的orm框架

    首先spring自带了mongodb的orm,spring data mongodb,但是这个框架非常难用,最令人抓狂的是每个文档都要带一个 _class 字段,因为这个是string的,所以占用不少 ...

  2. MongoEngine MongoDB 的 ORM 库

    NoSQL Manager for MongoDB操作 远程连接服务器数据库 pymongo的弊端 pymongo来操作mongodb数据库,但是直接把数据库的操作代码写在脚本中,使得应用代码的耦合性 ...

  3. Morphia - mongodb之ORM框架

    一.简介 二.注解 1.@Entity 2.@Id 3.@Indexed 4.@Embedded 5.@Transient和@Property 6.@Reference 三.示例 四.参考资料 Mor ...

  4. Spring Boot MongoDB 入门

    1. 概述 可能有一些胖友对 MongoDB 不是很了解,这里我们引用一段介绍: FROM <分布式文档存储数据库 MongoDB> MongoDB 是一个介于关系数据库和非关系数据库之间 ...

  5. 将MongoDB与Morphia结合使用

    在过去的几年中, NoSQL数据库(例如CouchDB,Cassandra和MongoDB)在不需要运行传统RDBMS的语义和开销的应用程序中得到了普及. 我不会进入选择NoSQL数据库的设计决策,因 ...

  6. mjorm java_MongoDB 的 ORM框架 MJORM

    软件介绍 MJORM 是一个mongoDB 的"ORM"映射表,类似Hibernate 的ORM,操作,配置使用比较简单,MJORM有其自身的MQL也对应Hibernate的HQL ...

  7. MongoDB学习指导

    原文地址:http://blog.csdn.net/jakenson/article/details/7060431 MongoDB的内部构造<MongoDB The Definitive Gu ...

  8. 关于Mongodb的全面总结

    MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...

  9. 关于Mongodb的全面总结,学习mongodb的人,可以从这里开始!

    转载地址:http://blog.csdn.net/he90227/article/details/45674513 原文地址:http://blog.csdn.NET/jakenson/articl ...

最新文章

  1. QWidget子窗口中setStyleSheet无效,解决方法
  2. 反汇编基础、OllyDbg简介和界面、基本操作、初级TraceMe练习
  3. jmeter吞吐量_进阶Spring Boot---Tomcat与Undertow 吞吐量对比
  4. Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程
  5. 非常有趣的Console
  6. Mr.J-- jQuery学习笔记(二十)--节点操作方法
  7. oracle 多版本机制,关于oracle多版本机制副作用的问题-Oracle
  8. hsql mybatis 表不存在_Mybatis-plus 查询数据库表时抛异常提示数据库表不存在
  9. 分享盒子直播软件.已测试,网络机顶盒看电视直播哪个软件好(最好用的三款免费直播软件分享)...
  10. 华为商业级AC6005+AP3030DN无线WIFI组网
  11. Mysql数据库自动备份
  12. C语言编程>第十六周 ① 给定程序的功能是求1/4的圆周长。函数通过形参得到圆的直径,函数返回1/4的圆周长(圆周长公式为:L=Πd,在程序中定义的变量名要与公式的变量相同)。
  13. BUUCTF Misc wp大合集(1)
  14. 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0
  15. YiLu代理中住宅IP代理和数据中心/机房IP代理分析及对比
  16. 贝叶斯法则的举例分析
  17. 联想集团ESG与社会价值论坛召开,首次发布《联想集团2022社会价值报告》
  18. Altium Designer中的电路仿真
  19. 力扣-718最长重复子数组(dp)
  20. Android+webService的连接

热门文章

  1. NeutralinoJS成为Electron和Tauri的下一个劲敌?不自量力
  2. 基于国产龙芯 CPU 的气井工业网关研究与设计(一)
  3. 柯洁宣布:明年4月,将再次与围棋AI交锋
  4. MT6592 audio笔记
  5. 太厉害了:雄霸美国的黑市拳王,竟然是中国人!
  6. 计算0-100之间奇数的和 偶数的和
  7. PHP动态网页开发中常用的一些函数
  8. klai安装vmware tools
  9. 计蒜客 T1954 圆锥体的表面积 JAVA
  10. cubase怎么添加midi设备_教你解决Cubase拔出USB-MIDI设备后不能再识别的问题。