MyBatis-Plus 條件構造器Wrapper使用示例詳解(最新整理)
一、條件構造器概述
條件構造器(Wrapper)是 MyBatis-Plus 框架中用于動態(tài)構建 SQL 條件的核心工具類,通過鏈式編程方式實現(xiàn)復雜查詢條件的組合。其主要作用包括:
- 替代傳統(tǒng) XML 中的動態(tài) SQL 標簽
- 提供類型安全的條件構建方式
- 支持 Lambda 表達式語法
- 實現(xiàn)復雜的 AND/OR 條件組合
注意:MyBatis-Plus 3.x+ 版本已棄用 EntityWrapper,推薦使用 QueryWrapper 和 LambdaQueryWrapper。
二、核心 Wrapper 類型
| 類型 | 說明 | 版本要求 |
|---|---|---|
QueryWrapper<T> | 通用條件構造器 | 3.0+ |
UpdateWrapper<T> | 更新操作條件構造器 | 3.0+ |
LambdaQueryWrapper<T> | Lambda 語法條件構造器 | 3.0.5+ |
三、基礎使用示例
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. Lambda 表達式構建
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. 嵌套條件構建
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. 更新操作條件構建
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
.set("name", "新名字")
.set("age", 30);
int result = userMapper.update(null, updateWrapper);四、常用方法說明
條件構建方法
| 方法名 | 說明 | 示例 |
|---|---|---|
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 表達式,具有以下優(yōu)勢:
- 類型安全:避免字段名拼寫錯誤
- 代碼可讀性高:直接使用實體類字段
- IDE 自動補全:方便快速構建條件
六、注意事項
- 空值處理:條件構造器會自動忽略
null值 - SQL 注入:避免直接拼接用戶輸入,使用參數(shù)綁定防止 SQL 注入
- 性能優(yōu)化:復雜條件查詢時,合理使用索引
七、更多示例 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. 復雜查詢
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. 復雜查詢
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. 復雜更新
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);到此這篇關于MyBatis-Plus 條件構造器Wrapper使用指南的文章就介紹到這了,更多相關MyBatis-Plus 條件構造器Wrapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot連接redis并動態(tài)切換database的實現(xiàn)方法
這篇文章主要介紹了springboot連接redis并動態(tài)切換database,本文主為通過修改ConnectionFactory從而達到動態(tài)切換database的效果,結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-03-03
利用Springboot+Caffeine實現(xiàn)本地緩存實例代碼
Caffeine是一個基于Java8開發(fā)的提供了近乎最佳命中率的高性能的緩存庫,下面這篇文章主要給大家介紹了關于利用Springboot+Caffeine實現(xiàn)本地緩存的相關資料,需要的朋友可以參考下2023-01-01
Spring boot中PropertySource注解的使用方法詳解
這篇文章主要給大家介紹了關于Spring boot中PropertySource注解的使用方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。2017-12-12

