MP条件构造器之常用功能详解(between、notBetween、like)
文章目录
- between
- 使用范围
- 方法签名
- 参数说明
- 示例
- 使用 `between` 设置指定字段的 BETWEEN 条件
- 动态根据条件设置 `between` BETWEEN 条件
- 动态设置 `between` 条件
- notBetween
- 使用范围
- 方法签名
- 参数说明
- 示例
- 使用 `notBetween` 设置指定字段的 NOT BETWEEN 条件
- 动态根据条件设置 `notBetween` NOT BETWEEN 条件
- like
- 使用范围
- 方法签名
- 参数说明
- 示例
- 使用 `like` 设置指定字段的 LIKE 条件
- 动态根据条件设置 `like` LIKE 条件
between
between
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 BETWEEN
条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
// 设置指定字段的 BETWEEN 条件
between(R column, Object val1, Object val2)
// 根据条件设置指定字段的 BETWEEN 条件
between(boolean condition, R column, Object val1, Object val2)
参数说明
column
:数据库字段名或使用Lambda
表达式的字段名。val1
:与字段名对应的第一个值,表示 BETWEEN 条件的起始值。val2
:与字段名对应的第二个值,表示 BETWEEN 条件的结束值。condition
:一个布尔值,用于控制是否应用这个 BETWEEN 条件。
示例
使用 between
设置指定字段的 BETWEEN 条件
查询年龄在 20 到 30 岁之间的用户。
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询 age 在 20 到 30 之间的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 20, 30);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询 age 在 20 到 30 之间的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.between(User::getAge, 20, 30);
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE age BETWEEN 20 AND 30;
动态根据条件设置 between
BETWEEN 条件
现在我们希望根据动态条件来设置 BETWEEN 条件。例如,如果条件成立,则查询年龄在 20 到 30 岁之间的用户。
动态设置 between
条件
普通 Wrapper (QueryWrapper):
Integer minAge = 20;
Integer maxAge = 30;
boolean hasAgeRange = minAge != null && maxAge != null;
// 使用 QueryWrapper 动态查询 age 在 minAge 和 maxAge 之间的用户(仅当 hasAgeRange 为 true 时才加入条件)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between(hasAgeRange, "age", minAge, maxAge);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
Integer minAge = 20;
Integer maxAge = 30;
boolean hasAgeRange = minAge != null && maxAge != null;
// 使用 LambdaQueryWrapper 动态查询 age 在 minAge 和 maxAge 之间的用户(仅当 hasAgeRange 为 true 时才加入条件)
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.between(hasAgeRange, User::getAge, minAge, maxAge);
List<User> users = userMapper.selectList(queryWrapper);
如果 minAge
为 20,maxAge
** 为 30,生成的 SQL 语句如下:**
SELECT * FROM user WHERE age BETWEEN 20 AND 30;
如果 minAge
或 maxAge
为 null
,生成的 SQL 语句如下:
SELECT * FROM user;
notBetween
notBetween
方法是 **MyBatis-Plus **中用于构建查询条件的另一个基本方法,它用于设置单个字段的 NOT BETWEEN
条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
// 设置指定字段的 NOT BETWEEN 条件
notBetween(R column, Object val1, Object val2)
// 根据条件设置指定字段的 NOT BETWEEN 条件
notBetween(boolean condition, R column, Object val1, Object val2)
参数说明
column
:数据库字段名或使用Lambda
表达式的字段名。val1
:与字段名对应的第一个值,表示 NOT BETWEEN 条件的起始值。val2
:与字段名对应的第二个值,表示 NOT BETWEEN 条件的结束值。condition
:一个布尔值,用于控制是否应用这个 NOT BETWEEN 条件。
示例
使用 notBetween
设置指定字段的 NOT BETWEEN 条件
查询年龄不在 20 到 30 岁之间的用户。
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询 age 不在 20 到 30 之间的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notBetween("age", 20, 30);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询 age 不在 20 到 30 之间的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.notBetween(User::getAge, 20, 30);
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE age NOT BETWEEN 20 AND 30;
动态根据条件设置 notBetween
NOT BETWEEN 条件
现在我们希望根据动态条件来设置 NOT BETWEEN 条件。例如,如果条件成立,则查询年龄不在 20 到 30 岁之间的用户。
普通 Wrapper (QueryWrapper):
Integer minAge = 20;
Integer maxAge = 30;
boolean hasAgeRange = minAge != null && maxAge != null;
// 使用 QueryWrapper 动态查询 age 不在 minAge 和 maxAge 之间的用户(仅当 hasAgeRange 为 true 时才加入条件)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notBetween(hasAgeRange, "age", minAge, maxAge);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
Integer minAge = 20;
Integer maxAge = 30;
boolean hasAgeRange = minAge != null && maxAge != null;
// 使用 LambdaQueryWrapper 动态查询 age 不在 minAge 和 maxAge 之间的用户(仅当 hasAgeRange 为 true 时才加入条件)
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.notBetween(hasAgeRange, User::getAge, minAge, maxAge);
List<User> users = userMapper.selectList(queryWrapper);
如果 minAge
为 20,maxAge
** 为 30,生成的 SQL 语句如下:**
SELECT * FROM user WHERE age NOT BETWEEN 20 AND 30;
如果 minAge
或 maxAge
为 null
,生成的 SQL 语句如下:
SELECT * FROM user;
like
like
方法是 **MyBatis-Plus **中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的 LIKE
条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
// 设置指定字段的 LIKE 条件
like(R column, Object val)
// 根据条件设置指定字段的 LIKE 条件
like(boolean condition, R column, Object val)
参数说明
column
:数据库字段名或使用Lambda
表达式的字段名。val
:与字段名对应的值,表示 LIKE 条件中的搜索值。condition
:一个布尔值,用于控制是否应用这个 LIKE 条件。
示例
使用 like
设置指定字段的 LIKE 条件
查询用户名中包含 “admin” 的用户。
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询 username 包含 "admin" 的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username", "admin");
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询 username 包含 "admin" 的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(User::getUsername, "admin");
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE username LIKE '%admin%';
动态根据条件设置 like
LIKE 条件
现在我们希望根据动态条件来设置 LIKE 条件。例如,如果条件成立,则查询用户名中包含 “admin” 的用户。
普通 Wrapper (QueryWrapper):
String username = "admin";
boolean hasUsername = username != null && !username.isEmpty();
// 使用 QueryWrapper 动态查询 username 包含 username 的用户(仅当 hasUsername 为 true 时才加入条件)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like(hasUsername, "username", username);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
String username = "admin";
boolean hasUsername = username != null && !username.isEmpty();
// 使用 LambdaQueryWrapper 动态查询 username 包含 username 的用户(仅当 hasUsername 为 true 时才加入条件)
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(hasUsername, User::getUsername, username);
List<User> users = userMapper.selectList(queryWrapper);
如果 username
为 “admin”,生成的 SQL 语句如下:
SELECT * FROM user WHERE username LIKE '%admin%';
如果 username
为 null
或空字符串,生成的 SQL 语句如下:
SELECT * FROM user;