`lambdaQuery()` 和 `lambda()`

在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 是一个查询构造器,用于构建查询条件。
  • eq(User::getAge, 18) 表示查询 age 等于 18 的用户。
  • like(User::getName, "John") 表示查询 name 中包含 “John” 的用户。

2. lambda()

lambda() 方法一般用于 MyBatis Plus 中的 QueryWrapper,它将查询条件转化为 Lambda 表达式版本。相对于 lambdaQuery() 直接返回一个 LambdaQueryWrapperlambda() 是在已有 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 表达式来确保字段名和实体类属性的一致性。

你可能感兴趣的:(java)