updateWrapper.setSql("turnover = turnover + " + dto.getMoney());,解决 BigDecimal 类型字段报错没有默认值的问题,如果字段为空就取dto.getMoney(),不为空就加
时间: 2023-12-03 09:42:49 浏览: 87
可以按照以下方式来解决该问题:
```java
BigDecimal turnover = Optional.ofNullable(entity.getTurnover()).orElse(BigDecimal.ZERO);
turnover = turnover.add(dto.getMoney());
updateWrapper.set("turnover", turnover);
```
上述代码中,我们首先使用 `Optional.ofNullable()` 方法将 `entity.getTurnover()` 的返回值封装为一个 `Optional` 对象,如果 `entity.getTurnover()` 返回的是 `null`,则 `Optional` 对象的值为空。接着,我们使用 `orElse()` 方法,如果 `Optional` 对象的值为空,则返回 `BigDecimal.ZERO`,否则返回 `entity.getTurnover()` 的值。最后,我们使用 `add()` 方法将 `dto.getMoney()` 加上 `turnover` 的值,并将结果赋值给 `turnover`。最后,我们使用 `set()` 方法将 `turnover` 的值设置到 `updateWrapper` 中。
这种方式可以避免直接对 `entity.getTurnover()` 的返回值进行操作,避免了空指针异常和数据库报错的问题。
相关问题
LambdaUpdateWrapper<StatTurnoverHour> updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.setSql("turnover = turnover + " + dto.getMoney()); updateWrapper.setSql("order_num = order_num + " + dto.getOrderNum()); updateWrapper.eq(StatTurnoverHour::getStoreId, dto.getStoreId()); updateWrapper.eq(StatTurnoverHour::getHourTime, dto.getHourTime()); updateWrapper.eq(StatTurnoverHour::getPayTime, dto.getPayTime());解决 BigDecimal 类型字段报错没有默认值的问题,如果turnover为空就取dto.getMoney(),不为空就执行updateWrapper.setSql("turnover = turnover + " + dto.getMoney());
你可以使用Java的三目运算符来实现这个逻辑,如下所示:
```
updateWrapper.setSql("turnover = " + (updateWrapper.getSqlSegment().contains("turnover") ? "turnover + " : "") + dto.getMoney());
```
这段代码中,首先判断`updateWrapper`对象中是否已经设置了`turnover`字段的更新语句,如果已经设置了,就在其后面加上`+ dto.getMoney()`;如果没有设置,则直接将`dto.getMoney()`赋值给`turnover`字段。这样就可以避免BigDecimal类型字段报错没有默认值的问题了。
LambdaUpdateWrapper<StatTurnoverHour> updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.setSql("turnover = turnover + " + dto.getMoney()); updateWrapper.setSql("order_num = order_num + " + dto.getOrderNum()); updateWrapper.eq(StatTurnoverHour::getStoreId, dto.getStoreId()); updateWrapper.eq(StatTurnoverHour::getHourTime, dto.getHourTime()); updateWrapper.eq(StatTurnoverHour::getPayTime, dto.getPayTime());解决 BigDecimal 类型字段报错没有默认值的问题,如果字段为空就取dto.getMoney(),不为空就执行updateWrapper.setSql("turnover = turnover + " + dto.getMoney());
可以使用三目运算符来判断,如果 BigDecimal 字段不为空,则执行更新操作,否则将 dto.getMoney() 赋值给该字段。代码示例如下:
```
updateWrapper.setSql("turnover = turnover + " + (dto.getTurnover() != null ? dto.getTurnover() : dto.getMoney()));
```
同样的方法也可以用于 order_num 字段的更新,示例代码如下:
```
updateWrapper.setSql("order_num = order_num + " + (dto.getOrderNum() != null ? dto.getOrderNum() : 1));
```
这样做可以保证字段不为空,避免了出现报错的情况。
阅读全文