QueryWrapper实现若不为空则带上条件
时间: 2024-05-16 16:10:32 浏览: 221
QueryWrapper是Mybatis-plus提供的一个查询条件构造器,可以方便地构建SQL查询条件。要实现若不为空则带上条件,可以使用Wrapper的链式调用和lambda表达式进行实现。
例如,我们有一个User类,想要根据条件查询用户信息:
```java
public class User {
private Long id;
private String name;
private Integer age;
// getter和setter方法
}
```
如果只有name不为空时才加入查询条件,可以使用如下代码:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(StringUtils.isNotBlank(user.getName()), User::getName, user.getName());
List<User> userList = userMapper.selectList(wrapper);
```
其中,StringUtils.isNotBlank()是org.apache.commons.lang3.StringUtils类提供的方法,用于判断字符串是否为空或空格字符。lambda()方法返回LambdaQueryWrapper对象,eq()方法表示相等的查询条件,User::getName表示使用User对象的getName方法获取属性值,user.getName()表示查询条件的值。
相关问题
QueryWrapper.eq 值为空
### 处理 MyBatis Plus QueryWrapper.eq 方法参数为空的情况
当 `QueryWrapper.eq` 方法中的值可能为空时,直接调用可能会导致不符合预期的结果或异常。为了确保查询逻辑的健壮性和准确性,在使用前应先判断传入的对象是否为空。
一种常见做法是在设置条件之前进行空值校验:
```java
if (val != null && !"".equals(val.toString().trim())) {
queryWrapper.eq("column_name", val);
}
```
这种方式可以有效防止因传递空字符串或其他形式的无效输入而导致的问题[^1]。
对于更为复杂的场景,比如多个字段都需要做类似的非空验证,则可以通过封装工具类来简化代码重复度高的部分。此外,利用 Java8 的 Optional 类也可以优雅地处理这种情况:
```java
Optional.ofNullable(val).ifPresent(v -> queryWrapper.eq("column_name", v));
```
这不仅提高了代码可读性还增强了安全性[^2]。
如果项目中频繁遇到此类需求,考虑自定义扩展 `AbstractWrapper` 或者创建自己的 Wrapper 工具类也是一个不错的选择。通过重写原有方法实现自动忽略 NULL/Empty 参数的功能[^3]。
querywrapper实现修改设为空值
要在querywrapper中实现将某个字段设为空值,可以使用缓存空对象的方法。首先,可以在查询条件中判断该字段是否为空,如果为空,则将其设置为一个空值。可以使用以下代码实现:
```java
queryWrapper.isNull("字段名");
```
这样,当查询条件中的字段为空时,会将其设置为空值。这种方法适用于数据经常变化,实时性较高的场景。同时,为了避免内存空间紧张,可以给空值缓存设置一个过期时间,让其自动过期。这样可以释放内存空间,提高系统的性能和稳定性。
阅读全文