文章目录
in
in
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 IN
条件,即字段的值在给定的集合中。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
// 设置指定字段的 IN 条件,使用集合、
in(R column, Collection<?> value)
in(boolean condition, R column, Collection<?> value)
// 设置指定字段的 IN 条件,使用可变参数
in(R column, Object... values)
in(boolean condition, R column, Object... values)
参数说明
column
:数据库字段名或使用Lambda
表达式的字段名。value
:一个集合,包含 IN 条件中字段可能的值。values
:一个可变参数列表,包含 IN 条件中字段可能的值。condition
:一个布尔值,用于控制是否应用这个 IN 条件。
示例
使用集合的 in
设置指定字段的 IN 条件
查询用户 ID 在指定集合中的用户。
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询用户 ID 在集合中的用户
List<Integer> userIds = Arrays.asList(1, 2, 3);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", userIds);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询用户 ID 在集合中的用户
List<Integer> userIds = Arrays.asList(1, 2, 3);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(User::getId, userIds);
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE id IN (1, 2, 3);
使用可变参数的 in
设置指定字段的 IN 条件
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询用户 ID 在指定参数中的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", 1, 2, 3);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询用户 ID 在指定参数中的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(User::getId, 1, 2, 3);
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE id IN (1, 2, 3);
动态根据条件设置 in
条件
根据动态条件来设置 IN 条件。例如,只有在集合非空时才加入 IN 条件。
普通 Wrapper (QueryWrapper):
List<Integer> userIds = Arrays.asList(1, 2, 3);
boolean hasUserIds = userIds != null && !userIds.isEmpty();
// 使用 QueryWrapper 动态查询用户 ID 在集合中的用户(仅当 hasUserIds 为 true 时才加入条件)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in(hasUserIds, "id", userIds);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
List<Integer> userIds = Arrays.asList(1, 2, 3);
boolean hasUserIds = userIds != null && !userIds.isEmpty();
// 使用 LambdaQueryWrapper 动态查询用户 ID 在集合中的用户(仅当 hasUserIds 为 true 时才加入条件)
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(hasUserIds, User::getId, userIds);
List<User> users = userMapper.selectList(queryWrapper);
如果 userIds
为 [1, 2, 3]
,生成的 SQL 语句如下:
SELECT * FROM user WHERE id IN (1, 2, 3);
如果 userIds
为空或为 null
,生成的 SQL 语句如下:
SELECT * FROM user;
notIn
notIn
方法是 **MyBatis-Plus **中用于构建查询条件的基本方法之一,它用于设置单个字段的 NOT IN
条件,即字段的值不在给定的集合中。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
// 设置指定字段的 NOT IN 条件,使用集合
notIn(R column, Collection<?> value)
notIn(boolean condition, R column, Collection<?> value)
// 设置指定字段的 NOT IN 条件,使用可变参数
notIn(R column, Object... values)
notIn(boolean condition, R column, Object... values)
参数说明
column
:数据库字段名或使用Lambda
表达式的字段名。value
:一个集合,包含 NOT IN 条件中字段可能的值。values
:一个可变参数列表,包含 NOT IN 条件中字段可能的值。condition
:一个布尔值,用于控制是否应用这个 NOT IN 条件。
示例
使用 notIn
设置指定字段的 NOT IN 条件
我们希望查询用户 ID 不在指定集合中的用户。
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询用户 ID 不在集合中的用户
List<Integer> userIds = Arrays.asList(1, 2, 3);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn("id", userIds);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询用户 ID 不在集合中的用户
List<Integer> userIds = Arrays.asList(1, 2, 3);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.notIn(User::getId, userIds);
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE id NOT IN (1, 2, 3);
使用可变参数的 notIn
设置指定字段的 NOT IN 条件
普通 Wrapper (QueryWrapper):
// 使用 QueryWrapper 查询用户 ID 不在指定参数中的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn("id", 1, 2, 3);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
// 使用 LambdaQueryWrapper 查询用户 ID 不在指定参数中的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.notIn(User::getId, 1, 2, 3);
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM user WHERE id NOT IN (1, 2, 3);
动态根据条件设置 notIn
条件
根据动态条件来设置 NOT IN 条件。例如,只有在集合非空时才加入 NOT IN 条件。
普通 Wrapper (QueryWrapper):
List<Integer> userIds = Arrays.asList(1, 2, 3);
boolean hasUserIds = userIds != null && !userIds.isEmpty();
// 使用 QueryWrapper 动态查询用户 ID 不在集合中的用户(仅当 hasUserIds 为 true 时才加入条件)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn(hasUserIds, "id", userIds);
List<User> users = userMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper):
List<Integer> userIds = Arrays.asList(1, 2, 3);
boolean hasUserIds = userIds != null && !userIds.isEmpty();
// 使用 LambdaQueryWrapper 动态查询用户 ID 不在集合中的用户(仅当 hasUserIds 为 true 时才加入条件)
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.notIn(hasUserIds, User::getId, userIds);
List<User> users = userMapper.selectList(queryWrapper);
如果 userIds
为 [1, 2, 3]
,生成的 SQL 语句如下:
SELECT * FROM user WHERE id NOT IN (1, 2, 3);
如果 userIds
为空或为 null
,生成的 SQL 语句如下:
SELECT * FROM user;
groupBy
groupBy
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置查询结果的分组条件。通过指定一个或多个字段,groupBy
方法可以生成 SQL 语句中的 GROUP BY 子句。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
// 设置分组条件,使用字段名
groupBy(R... columns)
groupBy(boolean condition, R... columns)
参数说明
columns
:一个可变参数列表,包含用于分组的字段名。condition
:一个布尔值,用于控制是否应用这个分组条件。
示例
假设我们有一个 Order
表,其中包含字段 order_date
和 total_amount
。我们希望根据 order_date
对订单进行分组。
根据指定条件设置分组条件
普通 Wrapper (QueryWrapper
):
// 创建 QueryWrapper 实例
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
// 设置分组条件,按 order_date 分组
queryWrapper.groupBy("order_date");
// 执行查询,获取按日期分组后的结果
List<Order> orders = orderMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper
):
// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
// 设置分组条件,按 order_date 分组
queryWrapper.groupBy(Order::getOrderDate);
// 执行查询,获取按日期分组后的结果
List<Order> orders = orderMapper.selectList(queryWrapper);
生成的 SQL 语句:
SELECT * FROM order GROUP BY order_date;
动态根据条件设置分组条件
现在,我们希望根据动态条件来设置分组条件。例如,如果条件成立,则按 order_date
分组。
普通 Wrapper (QueryWrapper
):
// 动态设置分组条件
boolean shouldGroupByDate = true; // 例如从外部条件中获得
// 创建 QueryWrapper 实例
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
// 根据条件动态设置分组条件
queryWrapper.groupBy(shouldGroupByDate, "order_date");
// 执行查询,获取分组后的结果
List<Order> orders = orderMapper.selectList(queryWrapper);
Lambda Wrapper (LambdaQueryWrapper
):
// 动态设置分组条件
boolean shouldGroupByDate = true; // 例如从外部条件中获得
// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
// 根据条件动态设置分组条件
queryWrapper.groupBy(shouldGroupByDate, Order::getOrderDate);
// 执行查询,获取分组后的结果
List<Order> orders = orderMapper.selectList(queryWrapper);
如果 shouldGroupByDate
为 true
,生成的 SQL 语句如下:
SELECT * FROM order GROUP BY order_date;
如果 shouldGroupByDate
为 false
,生成的 SQL 语句如下:
SELECT * FROM order;