Mybatis Plus 条件构造器 Wrapper
TIP
Wrapper 是 MyBatis-Plus 的核心查询工具,支持 Lambda 表达式和链式调用,避免了拼写字段名的硬编码。
QueryWrapper(普通查询)
java
// 基本条件
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三")
.ge("age", 18)
.like("email", "@qq.com")
.orderByDesc("create_time");
List<User> users = userMapper.selectList(wrapper);
// 多条件组合
wrapper.and(w -> w.eq("name", "张三").or().eq("name", "李四"));
// 子查询
wrapper.inSql("id", "SELECT user_id FROM `order` WHERE amount > 1000");LambdaQueryWrapper(类型安全)
java
// 使用 Lambda 表达式,字段名通过方法引用获取
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery();
wrapper.eq(User::getName, "张三")
.ge(User::getAge, 18)
.like(User::getEmail, "@qq.com")
.orderByDesc(User::getCreateTime);
// 简化写法
List<User> users = userMapper.selectList(
Wrappers.<User>lambdaQuery()
.eq(User::getName, "张三")
.select(User::getId, User::getName)
);UpdateWrapper(更新条件)
java
// 条件更新
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", "张三")
.set("age", 30)
.set("email", "new@example.com");
userMapper.update(null, wrapper);
// Lambda 方式
userMapper.update(null,
Wrappers.<User>lambdaUpdate()
.eq(User::getName, "张三")
.set(User::getAge, 30)
);常用条件方法
| 方法 | 说明 |
|---|---|
| eq / ne | 等于 / 不等于 |
| gt / ge | 大于 / 大于等于 |
| lt / le | 小于 / 小于等于 |
| between / notBetween | 在之间 / 不在之间 |
| like / notLike | 模糊查询 |
| likeLeft / likeRight | 左 / 右模糊 |
| isNull / isNotNull | 为 null / 不为 null |
| in / notIn | 包含 / 不包含 |
| groupBy | 分组 |
| orderByAsc / orderByDesc | 排序 |
| having | 分组筛选 |
| apply | 拼接原生 SQL |