在 MyBatis-Plus 中,LambdaQueryWrapper 是一种常用的查询构造器,它基于 Lambda 表达式来构建查询条件。使用 LambdaQueryWrapper 可以避免字符串拼接的错误,提高代码的可读性和类型安全性。以下是 LambdaQueryWrapper 方法的常见用法。
- 创建 LambdaQueryWrapper 实例
可以通过 LambdaQueryWrapper 的构造方法来创建一个实例,传入实体类的 Class 类型:
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
- 常用方法
2.1 eq(), ne(), gt(), lt(), ge(), le()
这些方法用来构建简单的条件。
eq:等于
ne:不等于
gt:大于
lt:小于
ge:大于等于
le:小于等于
queryWrapper.eq(User::getAge, 25); // age = 25
queryWrapper.ne(User::getName, "John"); // name != "John"
queryWrapper.gt(User::getAge, 20); // age > 20
queryWrapper.lt(User::getAge, 30); // age < 30
queryWrapper.ge(User::getAge, 18); // age >= 18
queryWrapper.le(User::getAge, 60); // age <= 60
2.2 like(), notLike()
用于字符串模糊匹配。
queryWrapper.like(User::getName, "Jo"); // name LIKE "%Jo%"
queryWrapper.notLike(User::getName, "John"); // name NOT LIKE "%John%"
2.3 in(), notIn()
用于集合条件查询。
queryWrapper.in(User::getAge, 20, 25, 30); // age IN (20, 25, 30)
queryWrapper.notIn(User::getAge, 40, 50); // age NOT IN (40, 50)
2.4 between(), notBetween()
用于范围查询。
queryWrapper.between(User::getAge, 20, 30); // age BETWEEN 20 AND 30
queryWrapper.notBetween(User::getAge, 40, 50); // age NOT BETWEEN 40 AND 50
2.5 isNull(), isNotNull()
用于判断字段是否为 null。
queryWrapper.isNull(User::getEmail); // email IS NULL
queryWrapper.isNotNull(User::getPhone); // phone IS NOT NULL
2.6 orderByAsc(), orderByDesc()
用于排序。
queryWrapper.orderByAsc(User::getAge); // 按年龄升序排序
queryWrapper.orderByDesc(User::getAge); // 按年龄降序排序
2.7 likeLeft(), likeRight()
用于左右模糊匹配。
queryWrapper.likeLeft(User::getName, "Jo"); // name LIKE "Jo%"
queryWrapper.likeRight(User::getName, "Jo"); // name LIKE "%Jo"
2.8 select()
选择需要查询的字段。
queryWrapper.select(User::getName, User::getAge); // 只查询 name 和 age
字段
2.9 groupBy(), having()
用于分组和聚合查询。
queryWrapper.groupBy(User::getAge); // 按年龄分组
queryWrapper.having("count(id) > 10"); // 聚合条件
2.10 nested()
用于嵌套条件查询。
queryWrapper.nested(w -> w.lt(User::getAge, 30).or().gt(User::getAge, 50)); // (age < 30 OR age > 50)
- 示例:综合查询
假设有一个 User 实体类,包含 id, name, age, email 等字段,以下是一个查询示例,查找年龄大于20且小于30的用户,按年龄升序排序,且查询字段为 name 和 age。
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.gt(User::getAge, 20)
.lt(User::getAge, 30)
.orderByAsc(User::getAge)
.select(User::getName, User::getAge);
List<User> users = userMapper.selectList(queryWrapper);
- 使用 and() 和 or()
可以使用 and() 和 or() 方法进行条件的组合。
queryWrapper.and(w -> w.gt(User::getAge, 20).lt(User::getAge, 30)); // (age > 20 AND age < 30)
queryWrapper.or(w -> w.eq(User::getStatus, 1).eq(User::getStatus, 2)); // (status = 1 OR status = 2)
总结
LambdaQueryWrapper 是 MyBatis-Plus 提供的强大查询工具,可以通过 Lambda 表达式构造类型安全的查询条件。
提供了丰富的方法,支持常见的查询操作,如 eq(), like(), in(), orderBy() 等,减少了手动拼接 SQL 的复杂度。
支持组合查询、排序、分组等复杂查询功能。