解决MyBatis-Plus 更新字段为null 不生效

1.异常说明:

mapper.updateById()时, set为null 未生效,其他字段更新

复制代码
                periodRecordOriginal.setSettleTime(null);
                periodRecordOriginal.setActualSettleTime(null);
                periodRecordOriginal.setSettleStatus(0);
                int i = periodRecordMapper.updateById(periodRecordOriginal);

2.原理:

MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进了不是全量更新的策略,默认忽略为null 的字段的

3.解决办法:

1)修改MyBatis-Plus 全局默认策略

缺点:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null

复制代码
mybatis-plus:
  global-config:
      #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
    field-strategy: 0

2)修改实体类注解,改变字段的忽略判断

缺点:需要注意数据库字段是否设置为 非null ,如果为非null 也更新不成功

复制代码
@TableField( updateStrategy = FieldStrategy.IGNORED)
    private Date settleTime;
相关推荐
王景程19 分钟前
如何使用 Redis 缓存验证码
redis·缓存·mybatis
尤物程序猿22 分钟前
【2025最新Java面试八股】如何在Spring启动过程中做缓存预热?
java·缓存·面试
春眠不觉晓♞1 小时前
使用多线程快速向Excel中快速插入一万条数据案例
java·学习·excel
Suckerbin1 小时前
第十一章-PHP表单传值
开发语言·php
fantasy_41 小时前
LeetCode238☞除自身以外数组的乘积
java·数据结构·python·算法·leetcode
GalenZhang8881 小时前
Java生成微信小程序码及小程序短链接
java·微信小程序·小程序
元亓亓亓1 小时前
Java后端开发day38--不可变集合&Stream流
java·开发语言
努力创造奇迹2 小时前
C 语言联合体、枚举、typedef 详解
c语言·开发语言
纪元A梦2 小时前
华为OD机试真题——阿里巴巴找黄金宝箱Ⅰ(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
java·c语言·javascript·c++·python·华为od·go
AI_RSER2 小时前
Python 数据可视化全场景实现(一)
开发语言·人工智能·python·信息可视化·遥感