一、条件构造器概述
条件构造器(wrapper)是 mybatis-plus 框架中用于动态构建 sql 条件的核心工具类,通过链式编程方式实现复杂查询条件的组合。其主要作用包括:
- 替代传统 xml 中的动态 sql 标签
- 提供类型安全的条件构建方式
- 支持 lambda 表达式语法
- 实现复杂的 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 优势
lambdaquerywrapper 使用 lambda 表达式,具有以下优势:
- 类型安全:避免字段名拼写错误
- 代码可读性高:直接使用实体类字段
- ide 自动补全:方便快速构建条件
六、注意事项
- 空值处理:条件构造器会自动忽略
null值 - sql 注入:避免直接拼接用户输入,使用参数绑定防止 sql 注入
- 性能优化:复杂条件查询时,合理使用索引
七、更多示例 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论