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

mybatisplus的查询,分页查询,自定义多表查询,修改的几种写法

使用mybatisplus的Db类简化写法

  1. 使用静态调用的方式,执行CRUD方法,避免Spring环境下Service循环注入、简洁代码,提升效率
  2. 需要项目中已注入对应实体的BaseMapper
  3. 完整使用方式见官方测试用例:官方测试用例地址
  4. 对于参数为Wrapper的,需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper
  5. 不建议在循环中调用,如果是批量保存,建议将数据构造好后使用 Db.saveBatch(数据) 保存

查询,修改简易写法

查询 lambdaQuery

模糊部门的名称为测试部门,并且部门层级不为2级的部门

Db.lambdaQuery(SysOrg.class).like(SysOrg::getOrgName, "测试部门").ne(SysOrg::getOrgLevel, 2);
修改 lambdaUpdate

将部门的状态修改为有效,条件是部门的id为orgId

 Db.lambdaUpdate(SysOrg.class).set(SysOrg::getStatus, SysOrgStatusEnum.VALID.getId()).eq(SysOrg::getId, orgId).update();

如果service实现类继承了mybatisplus的serviceImpl的话,也支持如下写法:
查询:

List<SysOrg> list = lambdaQuery().eq(SysOrg::getOrgName, "测试部门").ne(SysOrg::getOrgLevel, 2).list();

修改:

lambdaUpdate().set(SysOrg::getOrgName, "新的测试部门的名字").set(SysOrg::getOrgNameAbbr, "新的测试部门缩写").eq(SysOrg::getOrgId, orgId).update();

原生单表分页查询

public IPage<SysOrg> getSysOrgPage(SysOrgBo bo, Integer pageNo, Integer pageSize) {Page<SysOrg> page = new Page<>(pageNo, pageSize);page.addOrder(new OrderItem("create_time", false));// 3 查询条件Page<SysOrg> page = lambdaQuery().like(ObjectUtils.isNotBlank(bo.getOrgName()), SysOrg::getOrgName, bo.getOrgName()).in(ObjectUtils.isNotBlank(bo.getOrgId()),  SysOrg::getOrgId, bo.getOrgIds()).eq(ObjectUtils.isNotBlank(bo.getState()), SysOrg::getState, bo.getState()).page(page);
return page;	
// 在查询结果为空时,将记录设置为空列表的操作是多余的。因为Page对象在查询结果为空时,其getRecords()方法本身就应该返回一个空列表// 写法2:IPage<Entity> page = Db.page(new Page<>(1, 1), Entity.class);Assertions.assertEquals(2, page.getTotal());Assertions.assertEquals(Db.list(new Page<Entity>(1, 1), Entity.class).size(),page.getRecords().size());page = Db.page(new Page<>(1, 1), Wrappers.lambdaQuery(Entity.class));Assertions.assertEquals(1, page.getRecords().size());Assertions.assertEquals(Db.list(new Page<Entity>(1, 1), Wrappers.lambdaQuery(Entity.class)).size(),page.getRecords().size());

自定义分页多表查询

通过map构造查询条件
 // service实现类@Overridepublic IPage<SysOrgVo> selectCustomList(SysOrgBo bo) {Page<SysOrgVo> page = new Page<>(bo.getPageNo(), bo.getPageSize());Map<String, Object> map = getQueryParams(bo);Page<SysOrgVo> p = baseMapper.selectCustomList(page, map);if (ObjectUtils.isBlank(p.getRecords())) {p.setRecords(Collections.emptyList());} else {for (SysOrgVo vo : p.getRecords()) {// 后置操作,如补充某个字典值,字典keyvo.setAxx(axx);vo.setBxx(bxx));}}return p;}// 拼凑查询条件private Map<String, Object> getQueryParams(SysOrgBo bo) {// 获取当前登录用户LoginUser loginUser = LoginUserUtil.getLoginUser();if(loginUser ==null){throw new serviceException("获取登录用户信息失败“);}// 2 查询条件Map<String, Object> map = new HashMap<>();map.put("userId", loginUser.getId());map.put("orgId", orgId);map.put("delFlag","1");map.put("orgIds",Arrays.asList(1,2,3))if (ObjectUtils.isNotBlank(bo.getOrgName()) {map.put("orgName", "%" + bo.getOrgName()+ "%");}if (ObjectUtils.isNotBlank(bo.getOrgCode())) {map.put("orgCode", bo.getOrgCode());}return map;}// mapper.javaPage<SysOrgBo> selectCustomList(Page<SysOrgBo> page, @Param("params") Map<String, Object> params);// mapper.xml<select id="selectCustomList" resultType="org.jeecg.modules.sys.vo.SysOrgVo" parameterType="java.util.HashMap">selectsysorgfromsys_org aleft join 字典表1 b on b.org_id = a.idwherea.del_flag = 0and b.del_flag = 0<if test="params.orgCode!= null  and params.orgCode!= ''"> and a.org_code= #{params.orgCode}</if><if test="params.orgName!= null  and params.orgName!= ''"> and a.org_name like #{params.orgName}</if><if test="ids!=null and ids.size>0">and t.ID in<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">#{item}</foreach></if>order by a.create_time desc</select>
通过mybatisplus的queryWrapper构造查询条件
// service实现类
QueryWrapper<SysOrg> qw= new QueryWrapper<>();
qw.eq("t.del_flag", CommonConstant.DEL_FLAG_0);
qw.orderByAsc("t.depart_order");
qw.in("t.org_code", ids.split(SymbolConstant.COMMA));
qw.and(q->q.isNull(true,"t.parent_id").or().eq(true,"t.parent_id",""));List<SysOrgVo> list = departMapper.selectCustomList(qw);// mapper.javaList<SysOrgVo> selectCustomList(@org.apache.ibatis.annotations.Param(Constants.WRAPPER) Wrapper<SysOrg> queryWrapper);// mapper.xmlselect t.*, soeb.XXXfrom sys_org tLEFT JOIN sys_org_ext_business soeb on t.id = soeb.org_id${ew.customSqlSegment}
直接返回查询结果的某个字段
  String name = Db.getObj(Wrappers.lambdaQuery(Entity.class).eq(Entity::getId, 1L), Entity::getName);Assertions.assertEquals("ruben", name);

相关文章:

  • class 030 异或运算的骚操作
  • 汽车总线之---- LIN总线
  • Python 解析 html
  • QT:模仿QQ界面(9.28)
  • 各种图形的打印
  • 车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
  • 深信服校招面试总结
  • LabVIEW提高开发效率技巧----RT与FPGA模块
  • 【Linux】进程概念-2
  • PostgreSQL存储的简单总结
  • PHP安装后Apache无法运行的问题
  • 【每天学个新注解】Day 12 Lombok注解简解(十一)—@FieldDefaults(@NonFinal、@PackagePrivate)
  • C++随心记
  • Linux常用命令记录
  • (done) 声音信号处理基础知识(11) (Complex Numbers for Audio Signal Processing)
  • [笔记] php常见简单功能及函数
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • ES6系列(二)变量的解构赋值
  • Java的Interrupt与线程中断
  • Python 基础起步 (十) 什么叫函数?
  • Rancher如何对接Ceph-RBD块存储
  • 计算机常识 - 收藏集 - 掘金
  • 讲清楚之javascript作用域
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 算法---两个栈实现一个队列
  • 写给高年级小学生看的《Bash 指南》
  • 一些css基础学习笔记
  • 以太坊客户端Geth命令参数详解
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • "无招胜有招"nbsp;史上最全的互…
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $refs 、$nextTic、动态组件、name的使用
  • (20050108)又读《平凡的世界》
  • (55)MOS管专题--->(10)MOS管的封装
  • (编译到47%失败)to be deleted
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (源码分析)springsecurity认证授权
  • .net 4.0发布后不能正常显示图片问题
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 分布式技术比较
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET微信公众号开发-2.0创建自定义菜单
  • [ Socket学习 ] 第一章:网络基础知识
  • [<MySQL优化总结>]
  • [ABC275A] Find Takahashi 题解
  • [Android]使用Retrofit进行网络请求
  • [Angular] 笔记 20:NgContent
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C# 开发技巧]实现属于自己的截图工具