QueryWrapper.eq 值为空
时间: 2025-01-06 07:38:24 浏览: 5
### 处理 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<Record> queryWrapper = new QueryWrapper(); queryWrapper.apply("a.goods=b.id and b.storage=c.id and b.goodsType=d.id "); if("2".equals(roleId)){ // queryWrapper.eq(Record::getUserid,userId); queryWrapper.apply(" a.userId= "+userId); } if(StringUtils.isNotBlank(name) && !"null".equals(name)){ queryWrapper.like("b.name",name); } if(StringUtils.isNotBlank(goodstype) && !"null".equals(goodstype)){ queryWrapper.eq("d.id",goodstype); } if(StringUtils.isNotBlank(storage) && !"null".equals(storage)){ queryWrapper.eq("c.id",storage);
这段代码是使用了MyBatis-Plus的QueryWrapper来建数据库查询条件。首先,创建了一个空的QueryWrapper对象queryWrapper。然后,通过apply方法添加了一个自定义的SQL条件,该条件表示a表的goods字段等于b表的id字段,并且b表的storage字段等于c表的id字段,并且b表的goodsType字段等于d表的id字段。
接下来,通过判断roleId是否等于2,如果是则使用apply方法添加了一个自定义的SQL条件,该条件表示a表的userId字段等于指定的userId值。
然后,通过判断name是否不为空且不等于"null"字符串,如果满足条件则使用like方法添加了一个模糊查询条件,该条件表示b表的name字段包含指定的name值。
接着,通过判断goodstype是否不为空且不等于"null"字符串,如果满足条件则使用eq方法添加了一个等于查询条件,该条件表示d表的id字段等于指定的goodstype值。
最后,通过判断storage是否不为空且不等于"null"字符串,如果满足条件则使用eq方法添加了一个等于查询条件,该条件表示c表的id字段等于指定的storage值。
Long dishId = shoppingCart.getDishId(); LambdaQueryWrapper<ShoppingCart> queryWrapper=new LambdaQueryWrapper<>(); queryWrapper.eq(ShoppingCart::getUserId,id); if (dishId!=null){ queryWrapper.eq(ShoppingCart::getDishId,dishId); }else { queryWrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId()); } ShoppingCart cartserviceOne = shoppingCartservice.getOne(queryWrapper); if (cartserviceOne!=null){ Integer number = cartserviceOne.getNumber(); cartserviceOne.setNumber(number+1); shoppingCartservice.updateById(cartserviceOne); }else { shoppingCart.setNumber(1); shoppingCartservice.save(shoppingCart); cartserviceOne=shoppingCart; }
根据您提供的代码片段,您正在使用LambdaQueryWrapper来构建查询条件,并根据不同的情况设置不同的条件。
在代码中,首先创建了一个LambdaQueryWrapper对象`queryWrapper`,并设置了一个条件`queryWrapper.eq(ShoppingCart::getUserId, id)`,该条件用于匹配购物车中的`userId`字段与指定的`id`值相等的记录。
接下来,根据不同的条件进行判断和设置:
- 如果`dishId`不为空,将会添加一个条件`queryWrapper.eq(ShoppingCart::getDishId, dishId)`,用于匹配购物车中的`dishId`字段与指定的`dishId`值相等的记录。
- 如果`dishId`为空,将会添加一个条件`queryWrapper.eq(ShoppingCart::getSetmealId, shoppingCart.getSetmealId())`,用于匹配购物车中的`setmealId`字段与当前购物车记录的`setmealId`值相等的记录。
然后,通过`shoppingCartservice.getOne(queryWrapper)`方法来查询符合条件的购物车记录,并将结果赋值给变量`cartserviceOne`。
最后,根据查询结果进行不同的操作:
- 如果`cartserviceOne`不为空,表示查询到了符合条件的购物车记录。您将获取该购物车记录的数量,并将数量加1后更新到数据库中。
- 如果`cartserviceOne`为空,表示没有查询到符合条件的购物车记录。您将设置购物车记录的数量为1,并将其保存到数据库中,并将`shoppingCart`赋值给`cartserviceOne`。
这段代码的逻辑是根据不同的条件查询购物车记录,并根据查询结果进行不同的操作。
阅读全文