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 网络请求…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...