文章目录
- 条件构造器
- 简介
- 主要的Wrapper类
- AbstractWrapper
- QueryWrapper
- 示例
- UpdateWrapper
- 示例
- QueryWrapper
- 示例
- UpdateWrapper
- 示例
- 条件构造器的用法
- QueryWrapper和QueryWrapper
- UpdateWrapper和UpdateWrapper
- 注意
条件构造器
简介
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。**Wrapper **类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
主要的Wrapper类
AbstractWrapper
- 是一个抽象基类,提供了所有 Wrapper 类共有的方法和属性。
- 定义了条件构造的基本逻辑,包括字段(
column
)、值(value
)、操作符(condition
)等。 - 所有的
QueryWrapper
、UpdateWrapper
、LambdaQueryWrapper
和LambdaUpdateWrapper
都继承自**AbstractWrapper**
。
QueryWrapper
- 专门用于构造查询条件,支持基本的等于、不等于、大于、小于等各种常见操作。
- 允许以链式调用的方式添加多个查询条件,并且可以组合使用
and
和or
逻辑。
示例
// 创建一个 QueryWrapper 对象,用于构造查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 添加查询条件:user_name 等于 "Alice"
queryWrapper.eq("user_name", "Alice")// 添加查询条件:age 大于等于 18.ge("age", 18)// 添加查询条件:模糊查询,email 包含 "example.com" .like("email", "example.com");// 使用构造的条件查询用户列表
List<User> users = userMapper.selectList(queryWrapper);
UpdateWrapper
- 用于构造更新条件,可以在更新数据时指定条件。
- 与
QueryWrapper
类似,它也支持链式调用和逻辑组合。 - 使用
UpdateWrapper
可以在不创建实体对象的情况下,直接设置更新字段和条件。
示例
// 创建一个 UpdateWrapper 对象,用于构造更新条件
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// 添加查询条件:user_name 等于 "Alice"
updateWrapper.eq("user_name", "Alice")// 设置 email 字段为 "newemail@example.com".set("email", "newemail@example.com");// 根据构造的条件更新用户信息
int rows = userMapper.update(null, updateWrapper);
QueryWrapper
- 一个基于
Lambda
表达式的查询条件构造器,通过Lambda
表达式来引用实体类的属性,从而避免了硬编码字段名。 - 提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。
示例
// 创建一个 LambdaQueryWrapper 对象,用于构造查询条件
LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>();// 添加查询条件:userName 等于 "Alice"
lambdaQuery.eq(User::getUserName, "Alice")// 添加查询条件:age 大于等于 18.ge(User::getAge, 18)// 添加查询条件:email 包含 "example.com".like(User::getEmail, "example.com");// 使用构造的条件查询用户列表
List<User> users = userMapper.selectList(lambdaQuery);
UpdateWrapper
- 类似于
LambdaQueryWrapper
,LambdaUpdateWrapper
是基于Lambda
表达式的更新条件构造器。 - 允许使用
Lambda
表达式来指定更新字段和条件,同样避免了硬编码字段名的问题。
示例
// 创建一个 LambdaUpdateWrapper 对象,用于构造更新条件
LambdaUpdateWrapper<User> lambdaUpdate = new LambdaUpdateWrapper<>();// 添加查询条件:userName 等于 "Alice"
lambdaUpdate.eq(User::getUserName, "Alice")// 设置 email 字段为 "newemail@example.com".set(User::getEmail, "newemail@example.com");// 根据构造的条件更新用户信息
int rows = userMapper.update(null, lambdaUpdate);
条件构造器的用法
QueryWrapper和QueryWrapper
通常用来构建select
、delete
、update
的where
条件部分。
UpdateWrapper和UpdateWrapper
通常只有在set
语句比较特殊才使用。
注意
尽量使用LambdaQueryWrapper
和LambdateWrapper
,避免硬编码。