mybatisplus的查询,分页查询,自定义多表查询,修改的几种写法
使用mybatisplus的Db类简化写法
- 使用静态调用的方式,执行CRUD方法,避免Spring环境下Service循环注入、简洁代码,提升效率
- 需要项目中已注入对应实体的BaseMapper
- 完整使用方式见官方测试用例:官方测试用例地址
- 对于参数为Wrapper的,需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper
- 不建议在循环中调用,如果是批量保存,建议将数据构造好后使用 Db.saveBatch(数据) 保存
查询,修改简易写法
查询 lambdaQuery
模糊部门的名称为测试部门,并且部门层级不为2级的部门
List<SysOrg> list = Db.lambdaQuery(SysOrg.class).like(SysOrg::getOrgName, "测试部门").ne(SysOrg::getOrgLevel, 2).list();
修改 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);
相关文章:
mybatisplus的查询,分页查询,自定义多表查询,修改的几种写法
使用mybatisplus的Db类简化写法 使用静态调用的方式,执行CRUD方法,避免Spring环境下Service循环注入、简洁代码,提升效率需要项目中已注入对应实体的BaseMapper完整使用方式见官方测试用例:官方测试用例地址对于参数为Wrapper的&…...
括号匹配判断
本题实现求表达式中括号是否匹配。只需判断表达式中括号(本题中只会出现三种括号,分别是小括号,中括号和大括号)是否匹配,表达式中可以有其他值也可没有。 函数接口定义: int match (char *exp); 其中 …...
数据结构(栈和队列的实现)
1. 栈(Stack) 1.1 栈的概念与结构 栈是一种特殊的线性表,其只允许固定的一段插入和删除操作;进行数据插入和删除的一段叫做栈顶,另一端叫栈底;栈中的元素符合后进先出LIFO(Last In First Out&…...
Python批量处理客户明细表格数据,挖掘更大价值
批量处理 .xls 数据并进行归类分析以挖掘内在价值,通常涉及以下步骤: 读取数据:使用 pandas 库读取 .xls 文件。数据清洗:处理缺失值、异常值、重复值等。数据转换:对数据进行必要的转换,如日期格式统一、…...
NAND Flash虚拟层索引表机制
NAND Flash虚拟层的索引表用于建立逻辑块与数据块、日志块之间的关系,用于NAND Flash虚拟层在运行过程中的读写、擦除操作;由于NAND Flash虚拟层采用集中索引的方式,因此在NAND Flash虚拟层启动时需要在NAND Flash存放索引表区域扫描并确定NAND Flash中存…...
Spring Boot框架:新闻推荐系统开发新趋势
3系统分析 3.1可行性分析 通过对本新闻推荐系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本新闻推荐系统采用JAVA作为开发语言,Spring Boot框…...
RK3568平台(opencv篇)opencv处理图像
一.颜色转换 cv2.cvtColor()函数功能: 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型: cv2.cvtColor(src,code,dst=None,dstCn=None) 参数定义: src:要转换的源文件 code,转换的色彩空间,在 opencv 中有超过 150 种颜色空间转换方法,但是经常用的只有 B…...
【移动端】Viewport 视口
1. 什么是 Viewport(视口)? Viewport(视口)是指浏览器中用户可见的那部分网页内容的区域,简单来说,它是用户当前看到的网页的“窗口”区域。在不同的设备上,Viewport 的大小会有所不…...
PWM 模式
一、介绍 PWM(脉宽调制,Pulse-width modulation)是一种通过调节脉冲信号的宽度来控制电能输出的方法。PWM是一种方波信号,通常在电子和电气工程中用于调节功率输送,控制电机速度,调节LED亮度,以…...
模拟算法(3)_Z字形变换
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 模拟算法(3)_Z字形变换 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题目链…...
Go语言实现长连接并发框架 - 任务执行流路由模块
文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,上篇博客中我们实现了任务执行流上下文部分,接下来我们实现一下任务执行流的路由模块,基于该模块可以实现将消息转发到相应注册的任务执行流中进行处理 接…...
Windows 编译 FFmpeg 源码详细教程
FFmpeg FFmpeg 是一个开源的多媒体框架,它包括了一整套工具和库,可以用来处理(转码、转换、录制、流式传输等)音频和视频。FFmpeg 支持广泛的音视频格式,并且可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。 FFmpeg 的主要组件包括: ffmpeg:这是一个命令行工…...
JavaCV 实现视频链接截取封面工具
引入必要依赖 <!--JavaCV--> <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.7</version> </dependency> <dependency><groupId>cn.hutool</groupI…...
初识Linux · 进程替换
目录 前言: 1 直接看代码和现象 2 解释原理 3 将代码改成多进程版本 4 认识所有函数并使用 前言: 由前面的章节学习,我们已经了解了进程状态,进程终止以及进程等待,今天,我们学习进程替换。进程替换我…...
项目-坦克大战学习-人机ai
我们要知道,人机的移动和玩家的移动方式是一样的,所以我们可以将玩家移动代码以及检测碰撞代码移过来,唯一不同的就是人机检测到碰撞后会改变方向继续移动而不是停止 所以我们需要一个随机数使人机检测到碰撞后随机修改方向 Random rd new …...
YOLOv11改进 | Conv篇 | YOLOv11引入SKConv
1. SKConv介绍 1.1 摘要:在标准卷积神经网络(CNN)中,每层中阿尔蒂神经元的感受野被设计为共享相同的大小。在神经科学界众所周知,视觉皮层神经元的感受野大小受到刺激的调制,这在构建CNN时很少考虑。我们在CNN中提出了一种动态选择机制,允许每个神经元根据输入信息的多…...
招联2025校招内推
【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…...
美容院管理创新:SpringBoot系统设计与开发
摘 要 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,因此传统管理方式就不适合。为了让美容院信息的管理模式进行升级,也为了更好的维护美容院信息,美容院管理系统的开发运用就显得很有必要。并且通过开发…...
文心一言 VS 讯飞星火 VS chatgpt (361)-- 算法导论24.3 3题
三、假定将 Dijkstra 算法的第4行改为: 4 while |Q|>1 这种改变将让 while 循环的执行次数从 ∣ V ∣ |V| ∣V∣ 次降低到 ∣ V ∣ − 1 |V|-1 ∣V∣−1 次。这样修改后的算法正确吗? 如果要写代码,请用go语言。 文心一言: 将 Dijkst…...
ArkTS 开发中,有两种网络请求
在鸿蒙开发中,ArkTS(Ark TypeScript)是用于构建鸿蒙应用的一种开发语言,它基于TypeScript,并提供了丰富的API和工具集来简化开发过程。其中,网络请求是开发应用时经常需要用到的一个功能。 ArkTS 网络请求…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
