Mybatis-Plus条件构造器和常用接口
1. wapper介绍Wrapper 条件构造抽象类最顶端父类AbstractWrapper 用于查询条件封装生成sql的where条件QueryWrapper 查询条件封装UpdateWrapperUpdate条件封装AbstractLambdaWrapper 使用Lambda语法LambdaQueryWrapper用于Lambda语法使用的查询WrapperLambdaUpdateWrapperLambda更新封装Wrapper2. QueryWrapper2.1 组装查询条件Test public void test01(){ //查询用户名包含a年龄在20到30之间并且邮箱不为null的用户信息 //SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL) QueryWrapperUser queryWrapper new QueryWrapper(); queryWrapper.like(name, a) .between(age, 20, 30) .isNotNull(email); ListUser list userMapper.selectList(queryWrapper); list.forEach(System.out::println); }2.2 组装排序条件Test public void test02(){ //按年龄降序查询用户如果年龄相同则按id升序排列 //SELECT id,name AS name,age,email,is_deleted FROM t_user WHERE is_deleted0 ORDER BY age DESC,id ASC QueryWrapperUser queryWrapper new QueryWrapper(); queryWrapper .orderByDesc(age) .orderByAsc(id); ListUser users userMapper.selectList(queryWrapper); users.forEach(System.out::println); }2.3 组装删除条件Test public void test03(){ //删除email为空的用户逻辑删除 // 常规删除语句DELETE FROM t_user WHERE (email IS NULL) // 逻辑删除语句实质为更新UPDATE t_user SET is_deleted1 WHERE is_deleted0 AND (email IS NULL) QueryWrapperUser queryWrapper new QueryWrapper(); queryWrapper.isNull(email); //条件构造器也可以构建删除语句的条件 int result userMapper.delete(queryWrapper); System.out.println(受影响的行数 result); }2.4 条件的优先级Test public void test04() { QueryWrapperUser queryWrapper new QueryWrapper(); //将年龄大于20并且用户名中包含有a或邮箱为null的用户信息修改 //UPDATE t_user SET age?, email? WHERE (username LIKE ? AND age ? OR email IS NULL) // queryWrapper // .like(username, a) // .gt(age, 20) // .or() // .isNull(email); //lambda表达式内的逻辑优先运算 queryWrapper .like(name, a) .and(i - i.gt(age, 20).or().isNull(email)); User user new User(); user.setAge(18); user.setEmail(userqcby.com); int result userMapper.update(user, queryWrapper); System.out.println(受影响的行数 result); }2.5 组装 select 子句Test public void test05() { //查询用户信息的name和age字段 //SELECT name,age FROM t_user QueryWrapperUser queryWrapper new QueryWrapper(); queryWrapper.select(name, age); //selectMaps()返回Map集合列表通常配合select()使用避免User对象中没有被查询到的列值 为null ListMapString, Object maps userMapper.selectMaps(queryWrapper); maps.forEach(System.out::println); }2.6 实现子查询Test public void test06() { //查询id小于等于3的用户信息 //SELECT id,name,age,email,is_deleted FROM t_user WHERE (id IN (select id from t_user where id 3)) QueryWrapperUser queryWrapper new QueryWrapper(); // SQL语句字段名跟表一致而不是实体类 queryWrapper.inSql(uid, select uid from t_user where uid 3); ListUser list userMapper.selectList(queryWrapper); list.forEach(System.out::println); }3. UpdateWrapperTest public void test07() { //将年龄大于20或邮箱为null并且用户名中包含有a的用户信息修改 //组装set子句以及修改条件 UpdateWrapperUser updateWrapper new UpdateWrapper(); //lambda表达式内的逻辑优先运算 updateWrapper .set(age, 18) .set(email, userqcby.com) .like(name, a) .and(i - i.gt(age, 20).or().isNull(email)); //这里必须要创建User对象否则无法应用自动填充。如果没有自动填充可以设置为null //UPDATE t_user SET name?, age?,email? WHERE (name LIKE ? AND (age ? OR email IS NULL)) //User user new User(); //user.setName(张三); //int result userMapper.update(user, updateWrapper); //UPDATE t_user SET age?,email? WHERE (name LIKE ? AND (age ? OR email IS NULL)) int result userMapper.update(null, updateWrapper); System.out.println(result); }4. Condition在真正开发的过程中组装条件是常见的功能而这些条件数据来源于用户输入是可选的因此在组装这些条件时必须先判断用户是否选择了这些条件若选择则需要组装该条件若 没有选择则一定不能组装以免影响SQL执行的结果思路一Test public void test08() { //定义查询条件有可能为null用户未输入或未选择 String name null; Integer ageBegin 10; Integer ageEnd 24; QueryWrapperUser queryWrapper new QueryWrapper(); //StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成 if(StringUtils.isNotBlank(name)){ queryWrapper.like(name,a); } if(ageBegin ! null){ queryWrapper.ge(age, ageBegin); } if(ageEnd ! null){ queryWrapper.le(age, ageEnd); } //SELECT id,name,age,email,is_deleted FROM t_user WHERE (age ? AND age ?) ListUser users userMapper.selectList(queryWrapper); users.forEach(System.out::println); }思路二Test public void test08UseCondition() { //定义查询条件有可能为null用户未输入或未选择 String name null; Integer ageBegin 10; Integer ageEnd 24; QueryWrapperUser queryWrapper new QueryWrapper(); //StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成 queryWrapper .like(StringUtils.isNotBlank(name), name, a) // ge大于等于 .ge(ageBegin ! null, age, ageBegin) // le小于等于 .le(ageEnd ! null, age, ageEnd); //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (age ? AND age ?) ListUser users userMapper.selectList(queryWrapper); users.forEach(System.out::println); }5.LambdaQueryWrapperTest public void test09() { //定义查询条件有可能为null用户未输入 String name a; Integer ageBegin 10; Integer ageEnd 24; // Lambda 表达式方式指定字段避免使用字符串提高类型安全性和可读性常用于 MyBatis-Plus 的条件查询 LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); //避免使用字符串表示字段防止运行时错误 queryWrapper .like(StringUtils.isNotBlank(name), User::getName, name) .ge(ageBegin ! null, User::getAge, ageBegin) .le(ageEnd ! null, User::getAge, ageEnd); ListUser users userMapper.selectList(queryWrapper); users.forEach(System.out::println); }6.LambdaUpdateWrapperTest public void test10() { //组装set子句 // MyBatis-Plus 提供的一个更新条件构造器它是 UpdateWrapper 的 Lambda 表达式版本 // 使用 Lambda 表达式来引用实体类的字段从而避免了硬编码字符串字段名提高了类型安全性并减少了运行时错误的风险 LambdaUpdateWrapperUser updateWrapper new LambdaUpdateWrapper(); updateWrapper .set(User::getAge, 18) .set(User::getEmail, userqcby.com) .like(User::getName, a) .and(i - i.lt(User::getAge, 24).or().isNull(User::getEmail)); //lambda 表达式内的逻辑优先运算 User user new User(); int result userMapper.update(user, updateWrapper); System.out.println(受影响的行数 result); }

相关新闻

PythoC:让你的代码性能暴涨 40 倍的“黑科技”

PythoC:让你的代码性能暴涨 40 倍的“黑科技”

在编程界,Python 一直以“开发快、运行慢”著称。多少开发者在写完优雅的 Python 逻辑后,面对慢如蜗牛的执行速度,不得不苦哈哈地用 C 语言重写核心模块?最近我挖到了一个极其硬核的项目——PythoC。它不是像 Cython 那样套个“马…

2026/7/3 9:39:54 阅读更多 →
深空探测数据接口篇(三):通用异步串行通信标准——RS232、RS422 与 RS485

深空探测数据接口篇(三):通用异步串行通信标准——RS232、RS422 与 RS485

目录 前言 1. 通用异步串口通信概述 1.1 逻辑电平与信号分类 2. 物理层架构与接口标准 2.1 RS232:经典的“点对点”基础 2.2 RS422:高速、全双工的进阶 2.3 RS485:灵活的多点总线 3. 数据传输方式与帧格式 3.1 异步通信帧结构&#…

2026/5/17 10:23:37 阅读更多 →
[树莓派4B] 时隔多年,重新拾起树莓派时,发现时代变了

[树莓派4B] 时隔多年,重新拾起树莓派时,发现时代变了

前言 谁能想到,2024 年入手的树莓派,能让我在 2025 年之后体验了一把增值产品的虚荣感。最近突发奇想,从抽屉里找出那一台树莓派,拿来做一个局域网打印机共享之类的家庭服务器的小玩意儿,发现按照原来的方式已经没办法正常安装系统了。找了各种教程,都没办法解决,正准备…

2026/5/17 10:23:35 阅读更多 →

最新新闻

AppScan 10.0.1 安装部署全攻略:从证书导入到环境修复的避坑指南

AppScan 10.0.1 安装部署全攻略:从证书导入到环境修复的避坑指南

1. 项目概述:为什么AppScan的安装值得你认真对待如果你是一名安全工程师、渗透测试人员,或者正在负责公司应用系统的安全评估,那么IBM Security AppScan这个名字你一定不陌生。作为一款老牌且功能强大的Web应用动态安全测试(DAST&…

2026/7/5 7:32:10 阅读更多 →
STM32L152RE与25CSM04 EEPROM的高速数据检索优化方案

STM32L152RE与25CSM04 EEPROM的高速数据检索优化方案

1. 项目背景与核心需求在嵌入式系统开发中,数据检索的速度和精度往往成为系统性能的瓶颈。传统方案通常面临两个矛盾:要么使用低速但容量大的存储介质(如SD卡),要么选择高速但容量受限的片上Flash。25CSM04这款4Mb SPI…

2026/7/5 7:30:10 阅读更多 →
WindowsCleaner:彻底解决C盘爆红的终极清理工具,快速释放磁盘空间

WindowsCleaner:彻底解决C盘爆红的终极清理工具,快速释放磁盘空间

WindowsCleaner:彻底解决C盘爆红的终极清理工具,快速释放磁盘空间 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到Windows电…

2026/7/5 7:30:10 阅读更多 →
2026深度评测!7款AI论文写作平台,哪款才是你的心头好

2026深度评测!7款AI论文写作平台,哪款才是你的心头好

AI写论文工具介绍 在2026年的学术写作智能化浪潮中,越来越多人选择使用AI写论文工具。许多现有的工具在撰写硕士和博士论文等长篇作品时,往往面临一些难题。它们的理论深度常常不足,逻辑结构也显得松散。这使得普通的AI论文写作工具无法满足…

2026/7/5 7:26:09 阅读更多 →
如何在原神中突破60帧限制:终极帧率解锁完整指南

如何在原神中突破60帧限制:终极帧率解锁完整指南

如何在原神中突破60帧限制:终极帧率解锁完整指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否厌倦了原神60帧的限制,想要在提瓦特大陆体验更流畅的战斗和…

2026/7/5 7:24:06 阅读更多 →
STM32驱动WS2812智能LED的硬件设计与固件优化

STM32驱动WS2812智能LED的硬件设计与固件优化

1. 项目背景与硬件选型考量WS2812智能LED与STM32L432KC的组合在嵌入式灯光控制领域堪称黄金搭档。作为一名长期从事嵌入式开发的工程师,我最初选择这套方案是看中了STM32L432KC的低功耗特性(运行模式下仅100μA/MHz)与WS2812的高集成度优势。…

2026/7/5 7:24:06 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻