mybatis-plus notIn会排除空的字段
时间: 2023-07-18 12:31:36 浏览: 41
是的,MyBatis-Plus 的 notIn 方法会自动排除空值的字段。在不排除空值的情况下,如果传入的参数集合中包含空值,则会抛出 NullPointerException 异常。因此,MyBatis-Plus 在实现 notIn 方法时,会自动过滤掉传入参数集合中的空值。
例如,假设我们有一个 User 表,其中有一个状态字段 status,我们想要查询状态不为 1、2、3 的用户,我们可以使用 notIn 方法进行查询,如下所示:
```java
List<Integer> statusList = new ArrayList<>();
statusList.add(1);
statusList.add(2);
statusList.add(3);
QueryWrapper<User> wrapper = new QueryWrapper<User>();
wrapper.notIn("status", statusList);
List<User> userList = userMapper.selectList(wrapper);
```
在上面的代码中,我们传入了一个 statusList 集合,其中包含了 1、2、3 这三个值。MyBatis-Plus 会自动过滤掉这个集合中的空值,不对其进行查询。因此,即使 statusList 中包含空值,也不会对查询结果造成影响。
相关问题
mybatis-plus notIn 怎么不排除空的字段
如果你想在 MyBatis-Plus 的 notIn 方法中包含空值字段,可以使用 `Null` 类型来代替空值。例如,将 null 值转换成 `Null` 类型的对象,如下所示:
```java
List<Object> idList = new ArrayList<>();
idList.add(1);
idList.add(2);
idList.add(new Null());
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.notIn("id", idList);
List<User> userList = userMapper.selectList(wrapper);
```
在上面的代码中,我们将 null 值转换成 `Null` 类型的对象,并将这个对象添加到 idList 中。然后,在构建查询条件时,我们使用 notIn 方法进行查询,MyBatis-Plus 不会自动过滤掉 `Null` 类型的对象。因此,即使 idList 中包含了 `Null` 类型的对象,也会对查询结果产生影响。
需要注意的是,`Null` 对象是 MyBatis-Plus 提供的一个特殊类型,用于代表空值。如果你想要在 notIn 方法中包含空值字段,需要将空值转换成 `Null` 类型的对象。
mybatis-plus notIn 忽略空
如果你使用 MyBatis-Plus 的 notIn 方法进行查询时,如果传入的参数为空,会抛出 NullPointerException 异常。为了避免这种情况,你可以使用 MyBatis-Plus 提供的 Wrappers 工具类中的 lambdaQuery 方法,手动构建查询条件,然后在查询时将其传入,如下所示:
```java
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(null);
QueryWrapper<User> wrapper = new QueryWrapper<User>();
wrapper.lambda().notIn(User::getId, ids.stream().filter(Objects::nonNull).collect(Collectors.toList()));
List<User> userList = userMapper.selectList(wrapper);
```
在上面的例子中,我们手动构建了一个 QueryWrapper 对象,然后使用 lambdaQuery 方法构建了查询条件,最后调用 notIn 方法进行查询。由于我们使用了 filter 方法过滤了空值,因此即使传入的 ids 中包含空值,也不会抛出异常。