一、Wrapper简介
QueryWrapper
、UpdateWrapper
、LambdaQueryWrapper
和 LambdaUpdateWrapper
都是 MyBatis-Plus 框架中用于构建条件的工具类,它们之间的关系是继承关系。其中 QueryWrapper
和 UpdateWrapper
是基于普通的对象属性名来构建条件的,而 LambdaQueryWrapper
和 LambdaUpdateWrapper
则是基于 Lambda 表达式来构建条件的。
下面是AbstractWrapper中的方法
二、QueryWrapper:
QueryWrapper
是用于构建查询条件的工具类,可以通过链式调用的方式来添加查询条件,例如 equal
、like
、in
等条件。它的方法通常以 wrapper.eq
、wrapper.like
、wrapper.in
等形式命名。
QueryWrapper 类的方法一般都需要传入实体类的属性名,例如 wrapper.eq("name", "张三")
表示等于条件,wrapper.like("name", "张")
表示模糊查询条件。
示例:
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 20).like("name", "张");
List<User> userList = userMapper.selectList(wrapper);
三、UpdateWrapper:
UpdateWrapper
是用于构建更新条件的工具类,可以通过链式调用的方式来添加更新条件,例如 set
、eq
、like
等条件。它的方法通常以 wrapper.set
、wrapper.eq
、wrapper.like
等形式命名。
UpdateWrapper 类的方法一般都需要传入实体类的属性名,例如 wrapper.set("age", 30).eq("name", "张三")
表示设置年龄为 30,并且姓名为 “张三” 的记录。
示例:
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.set("age", 30).eq("name", "张三");
int rows = userMapper.update(null, wrapper);
四、LambdaQueryWrapper:
LambdaQueryWrapper
是 QueryWrapper
的 Lambda 版本,可以通过 Lambda 表达式来构建查询条件,避免硬编码实体类的属性名。它的方法以 lambda 表达式形式命名,例如lambdaWrapper.eq(User::getName, "张三")。
LambdaQueryWrapper
类的方法使用 Lambda 表达式来指定属性名和条件值,使得代码更加清晰和类型安全。
示例:
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 20).like(User::getName, "张");
List<User> userList = userMapper.selectList(lambdaWrapper);
五、LambdaUpdateWrapper:
LambdaUpdateWrapper
是 UpdateWrapper 的 Lambda 版本,用于构建更新条件的工具类,同样可以通过 Lambda 表达式来指定属性名和条件值。
LambdaUpdateWrapper
类的方法使用 Lambda 表达式来指定属性名和条件值,使得代码更加清晰和类型安全。
示例:
LambdaUpdateWrapper<User> lambdaWrapper = new LambdaUpdateWrapper<>();
lambdaWrapper.set(User::getAge, 30).eq(User::getName, "张三");
int rows = userMapper.update(null, lambdaWrapper);
总的来说,QueryWrapper 和 UpdateWrapper 是基于对象属性名构建条件的工具类,而 LambdaQueryWrapper 和 LambdaUpdateWrapper 则是基于 Lambda 表达式构建条件的工具类。Lambda 版本的 Wrapper 在使用时更加类型安全,可以避免硬编码实体类的属性名,使得代码更加清晰和易于维护。