MyBatis-Plus 条件构造器查询详解
基本用法
// 创建条件构造器
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 基本条件查询
queryWrapper.eq("name", "张三") // 等于
.ne("age", 20) // 不等于
.gt("age", 18) // 大于
.ge("age", 18) // 大于等于
.lt("age", 60) // 小于
.le("age", 60); // 小于等于
常用条件方法
1 模糊查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张") // LIKE '%张%'
.notLike("name", "王") // NOT LIKE '%王%'
.likeLeft("name", "张") // LIKE '%张'
.likeRight("name", "张"); // LIKE '张%'
2 范围查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30) // BETWEEN 18 AND 30
.notBetween("age", 18, 30) // NOT BETWEEN 18 AND 30
.in("age", 18, 20, 25) // IN (18,20,25)
.notIn("age", 18, 20, 25); // NOT IN (18,20,25)
3 空值判断
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("email") // IS NULL
.isNotNull("email"); // IS NOT NULL
4 多条件组合
// AND 和 OR 条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
.and(w -> w.eq("age", 20).or().eq("age", 25))
.or()
.eq("status", 1);
Lambda 表达式方式(推荐)
LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>();
// 使用 Lambda 表达式,避免硬编码字段名
lambdaQuery.eq(User::getName, "张三")
.ge(User::getAge, 18)
.like(User::getEmail, "@qq.com");
排序和分页
1 排序
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age") // ORDER BY age ASC
.orderByDesc("create_time"); // ORDER BY create_time DESC
// Lambda 方式
lambdaQuery.orderByAsc(User::getAge)
.orderByDesc(User::getCreateTime);
2 分页
// 创建分页对象 Page<User> page = new Page<>(1, 10); // 第1页,每页10条 // 分页查询 Page<User> userPage = userMapper.selectPage(page, queryWrapper); List<User> userList = userPage.getRecords(); // 获取数据 long total = userPage.getTotal(); // 总记录数
复杂查询示例
1 多表关联查询
// 自定义查询(使用 Wrapper 作为参数)
Page<User> page = new Page<>(1, 10);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("u.*, d.dept_name") // 指定查询字段
.eq("u.status", 1)
.like("u.name", "张");
// 在 mapper 中使用注解或 XML 实现多表查询
List<UserVO> list = userMapper.selectUserWithDept(page, wrapper);
2 动态条件查询
public List<User> selectUserByCondition(String name, Integer age, String email) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
// 动态添加条件
wrapper.eq(StringUtils.isNotBlank(name), User::getName, name)
.ge(age != null, User::getAge, age)
.like(StringUtils.isNotBlank(email), User::getEmail, email);
return userMapper.selectList(wrapper);
}
Wrapper 类型选择
| Wrapper类型 | 用途 | 示例 |
|---|---|---|
| QueryWrapper | 普通查询 | new QueryWrapper<>() |
| LambdaQueryWrapper | Lambda查询 | new LambdaQueryWrapper<>() |
| UpdateWrapper | 更新操作 | new UpdateWrapper<>() |
| LambdaUpdateWrapper | Lambda更新 | new LambdaUpdateWrapper<>() |
更新操作
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("age", 30)
.set("email", "new@email.com")
.eq("name", "张三");
userMapper.update(null, updateWrapper);
// Lambda 更新
LambdaUpdateWrapper<User> lambdaUpdate = new LambdaUpdateWrapper<>();
lambdaUpdate.set(User::getAge, 30)
.eq(User::getName, "张三");
userMapper.update(null, lambdaUpdate);
注意事项
- 防止SQL注入:使用条件构造器时,MyBatis-Plus 会自动处理参数,防止SQL注入
- 字段映射:Lambda表达式方式可以避免字段名拼写错误
- 性能优化:大量数据时建议分页查询,减少一次性查询的数据量
- 条件复用:可以将常用条件封装成方法复用
这样使用 MyBatis-Plus 的条件构造器,可以大大简化 SQL 编写,提高开发效率。

版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播