当使用 MybatisPlus 的 setSql 方法插入数据,解决 BigDecimal 类型字段报错没有默认值的问题,不设置默认值,使用指定值
时间: 2023-12-03 09:42:46 浏览: 112
可以在插入数据时,手动给 BigDecimal 类型的字段赋值,例如:
```java
MybatisPlusDemoEntity entity = new MybatisPlusDemoEntity();
entity.setBigDecimalField(new BigDecimal("0.00")); // 手动赋值 BigDecimal 类型字段
mybatisPlusDemoMapper.insert(entity);
```
这样就可以避免报错没有默认值的问题了。当然,如果你想要在数据库中设置默认值,也可以在数据库中将该字段的默认值设置为 0.00。
相关问题
mybatisplus 使用setSql 插入数据时BigDecimal类型字段报错没有默认值
当使用 MybatisPlus 的 `setSql` 方法插入数据,可能会遇到 BigDecimal 类型字段报错没有默认值的问题。这是因为 MybatisPlus 在执行插入操作时,会忽略掉没有赋值的属性,而 BigDecimal 类型的属性如果没有赋值,其默认值为 `null`,因此数据库会报错。
为了解决这个问题,可以在实体类中对 BigDecimal 类型的属性设置默认值,例如:
```java
public class MyEntity {
private BigDecimal myBigDecimal = BigDecimal.ZERO;
// ...
}
```
这样,在插入数据时,如果没有给 `myBigDecimal` 赋值,它的默认值就是 `BigDecimal.ZERO`,不会报错了。
updateWrapper.setSql("turnover = turnover + " + dto.getMoney());,解决 BigDecimal 类型字段报错没有默认值的问题,如果字段为空就取dto.getMoney(),不为空就加
可以按照以下方式来解决该问题:
```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()` 的返回值进行操作,避免了空指针异常和数据库报错的问题。
阅读全文