MyBatis-Plus 條件構(gòu)造器Wrapper使用示例詳解(最新整理)
一、條件構(gòu)造器概述
條件構(gòu)造器(Wrapper)是 MyBatis-Plus 框架中用于動態(tài)構(gòu)建 SQL 條件的核心工具類,通過鏈?zhǔn)骄幊谭绞綄?shí)現(xiàn)復(fù)雜查詢條件的組合。其主要作用包括:
- 替代傳統(tǒng) XML 中的動態(tài) SQL 標(biāo)簽
- 提供類型安全的條件構(gòu)建方式
- 支持 Lambda 表達(dá)式語法
- 實(shí)現(xiàn)復(fù)雜的 AND/OR 條件組合
注意:MyBatis-Plus 3.x+ 版本已棄用 EntityWrapper,推薦使用 QueryWrapper 和 LambdaQueryWrapper。
二、核心 Wrapper 類型
| 類型 | 說明 | 版本要求 |
|---|---|---|
QueryWrapper<T> | 通用條件構(gòu)造器 | 3.0+ |
UpdateWrapper<T> | 更新操作條件構(gòu)造器 | 3.0+ |
LambdaQueryWrapper<T> | Lambda 語法條件構(gòu)造器 | 3.0.5+ |
三、基礎(chǔ)使用示例
1. 簡單條件構(gòu)建
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
.like("name", "張")
.between("create_time", startDate, endDate)
.orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);2. Lambda 表達(dá)式構(gòu)建
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25)
.like(User::getName, "張")
.between(User::getCreateTime, startDate, endDate)
.orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);3. 嵌套條件構(gòu)建
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.eq("age", 25).or().like("name", "張"))
.between("create_time", startDate, endDate)
.orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);4. 更新操作條件構(gòu)建
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
.set("name", "新名字")
.set("age", 30);
int result = userMapper.update(null, updateWrapper);四、常用方法說明
條件構(gòu)建方法
| 方法名 | 說明 | 示例 |
|---|---|---|
eq | 等于 | eq("age", 25) |
ne | 不等于 | ne("age", 25) |
gt | 大于 | gt("age", 25) |
ge | 大于等于 | ge("age", 25) |
lt | 小于 | lt("age", 25) |
le | 小于等于 | le("age", 25) |
like | 模糊查詢 | like("name", "張") |
notLike | 非模糊查詢 | notLike("name", "張") |
between | 范圍查詢 | between("age", 20, 30) |
notBetween | 非范圍查詢 | notBetween("age", 20, 30) |
in | IN 查詢 | in("age", Arrays.asList(20, 25, 30)) |
notIn | NOT IN 查詢 | notIn("age", Arrays.asList(20, 25, 30)) |
isNull | IS NULL 查詢 | isNull("age") |
isNotNull | IS NOT NULL 查詢 | isNotNull("age") |
排序方法
| 方法名 | 說明 | 示例 |
|---|---|---|
orderByAsc | 升序排序 | orderByAsc("id") |
orderByDesc | 降序排序 | orderByDesc("id") |
嵌套條件方法
| 方法名 | 說明 | 示例 |
|---|---|---|
and | AND 嵌套條件 | and(w -> w.eq("age", 25).or().like("name", "張")) |
or | OR 嵌套條件 | or(w -> w.eq("age", 25).or().like("name", "張")) |
五、LambdaQueryWrapper 優(yōu)勢
LambdaQueryWrapper 使用 Lambda 表達(dá)式,具有以下優(yōu)勢:
- 類型安全:避免字段名拼寫錯(cuò)誤
- 代碼可讀性高:直接使用實(shí)體類字段
- IDE 自動補(bǔ)全:方便快速構(gòu)建條件
六、注意事項(xiàng)
- 空值處理:條件構(gòu)造器會自動忽略
null值 - SQL 注入:避免直接拼接用戶輸入,使用參數(shù)綁定防止 SQL 注入
- 性能優(yōu)化:復(fù)雜條件查詢時(shí),合理使用索引
七、更多示例 QueryWrapper
示例 1. 簡單查詢
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
.like("name", "張")
.between("create_time", startDate, endDate)
.orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);2. 復(fù)雜查詢
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.eq("age", 25).or().like("name", "張"))
.and(w -> w.between("create_time", startDate, endDate))
.orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);3. 刪除操作
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("email");
int result = userMapper.delete(wrapper);4. 更新操作
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("id", 1);
User user = new User();
user.setName("新名字");
user.setAge(30);
int result = userMapper.update(user, wrapper);LambdaQueryWrapper
示例 1. 簡單查詢
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25)
.like(User::getName, "張")
.between(User::getCreateTime, startDate, endDate)
.orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);2. 復(fù)雜查詢
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.and(w -> w.eq(User::getAge, 25).or().like(User::getName, "張"))
.and(w -> w.between(User::getCreateTime, startDate, endDate))
.orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);UpdateWrapper 示例
1. 簡單更新
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
.set("name", "新名字")
.set("age", 30);
int result = userMapper.update(null, updateWrapper);2. 復(fù)雜更新
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.like("name", "a")
.and(w -> w.gt("age", 20).or().isNull("email"))
.set("name", "小黑")
.set("email", "dhsjfghr");
int result = userMapper.update(null, updateWrapper);到此這篇關(guān)于MyBatis-Plus 條件構(gòu)造器Wrapper使用指南的文章就介紹到這了,更多相關(guān)MyBatis-Plus 條件構(gòu)造器Wrapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis 擴(kuò)展BaseTypeHandler 轉(zhuǎn)換泛型 JSON 列表的解
本文詳細(xì)介紹了MyBatis中處理JSON轉(zhuǎn)換的bug及其解決方法,文章還介紹了如何處理抽象類和自定義對象的JSON轉(zhuǎn)換,并提供了一個(gè)基類AbstractListTypeHandler作為示例,最后,文章附上了MyBatis內(nèi)建的javaTypeAlias鏈接,感興趣的朋友跟隨小編一起看看吧2025-12-12
Java中stream.map和stream.forEach的區(qū)別
本文主要介紹了Java中stream.map和stream.forEach的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例
這篇文章主要介紹了詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例,文中分別介紹了快排時(shí)兩種區(qū)間劃分的思路,需要的朋友可以參考下2016-04-04
Java21增強(qiáng)對Emoji表情符號處理示例詳解
這篇文章主要為大家介紹了Java21增強(qiáng)對Emoji表情符號處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Java程序順序結(jié)構(gòu)中邏輯控制語句詳解流程
在程序開發(fā)的過程之中一共會存在有三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行2021-10-10
使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化
本文主要介紹了使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-08-08
Java使用EasyExcel導(dǎo)出Excel的全流程詳解
在 Java 后端開發(fā)中,Excel 導(dǎo)出是非常常見的需求,涉及報(bào)表、數(shù)據(jù)分析或業(yè)務(wù)導(dǎo)出,本文將結(jié)合 阿里 EasyExcel 庫,詳細(xì)講解 Excel 導(dǎo)出流程,包括工具類設(shè)計(jì)、樣式、列寬策略、對象映射、輸出流處理,需要的朋友可以參考下2025-11-11

