mybatis-plus想要修改某字段为null
问题场景
使用mybatis + mybatisPlus进行修改某字段,想要将其设为null, 但执行时没有成功。
原因
mybatis-plus会将所有为空的字段在修改时进行过滤,不进行设为空的修改操作。
解决办法
在相关字段上加上注解
1 |
@TableField (strategy = FieldStrategy.IGNORED) |
例:
1 2 |
@TableField (strategy = FieldStrategy.IGNORED) private Long classId; |
mybatis-plus更新字段为null不生效
异常说明
mapper.updateById()时,set为null未生效,其他字段更新
1 2 3 4 |
periodRecordOriginal.setSettleTime( null ); periodRecordOriginal.setActualSettleTime( null ); periodRecordOriginal.setSettleStatus( 0 ); int i = periodRecordMapper.updateById(periodRecordOriginal); |
原理
MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进⾏了不是全量更新的策略,默认忽略为null 的字段的
解决办法
1)修改MyBatis-Plus 全局默认策略
缺点:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null
1 2 3 4 |
mybatis-plus: global-config: #字段策略 0 : "忽略判断" , 1 : "非 NULL 判断" , 2 : "非空判断" field-strategy: 0 |
2)修改实体类注解,改变字段的忽略判断
缺点:需要注意数据库字段是否设置为 非null ,如果为非null 也更新不成功
1 2 |
@TableField ( updateStrategy = FieldStrategy.IGNORED) private Date settleTime; |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/m0_67403073/article/details/124104442
查看更多关于使用mybatis-plus想要修改某字段为null问题的详细内容...