在Java中,lambdaQuery()
和 lambda()
是与 Lambda 表达式相关的查询方法,通常用于 MyBatis Plus 框架中。下面通过举例来解释它们的用法和区别。
1. lambdaQuery()
lambdaQuery()
是 MyBatis Plus 框架中常用的方法,用于创建基于 Lambda 表达式的查询构造器。它的主要作用是帮助我们通过 Lambda 表达式来构建查询条件,避免了硬编码字段名称带来的风险。
示例代码:
// 假设我们有一个 User 实体类
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// Getters and setters...
}
// 使用 lambdaQuery() 构建查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 18) // 查询年龄为18的用户
.like(User::getName, "John"); // 查询名字中包含“John”的用户
List<User> users = userMapper.selectList(queryWrapper);
解释:
LambdaQueryWrapper<User>
是一个查询构造器,用于构建查询条件。eq(User::getAge, 18)
表示查询age
等于 18 的用户。like(User::getName, "John")
表示查询name
中包含 “John” 的用户。
2. lambda()
lambda()
方法一般用于 MyBatis Plus 中的 QueryWrapper
,它将查询条件转化为 Lambda 表达式版本。相对于 lambdaQuery()
直接返回一个 LambdaQueryWrapper
,lambda()
是在已有 QueryWrapper
的基础上转化为 LambdaQueryWrapper
。
示例代码:
// 假设我们仍然有一个 User 实体类
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda() // 转换为 Lambda 表达式查询
.eq(User::getAge, 18) // 查询年龄为18的用户
.like(User::getName, "John"); // 查询名字中包含“John”的用户
List<User> users = userMapper.selectList(queryWrapper);
解释:
queryWrapper.lambda()
将QueryWrapper
转换为LambdaQueryWrapper
,以便使用 Lambda 表达式构建查询条件。eq(User::getAge, 18)
和like(User::getName, "John")
与lambdaQuery()
中的用法一致。
区别总结
lambdaQuery()
直接创建一个新的LambdaQueryWrapper
对象,适合在代码中直接使用。lambda()
是在已有的QueryWrapper
对象上调用的,将其转换为LambdaQueryWrapper
以支持 Lambda 表达式构建查询。
这两个方法都是为了减少硬编码字段名称带来的维护问题,利用 Lambda 表达式来确保字段名和实体类属性的一致性。