MyBatis-Plus 更新字段为 null 为何失效?

  1. 背景:使用MyBatis-Plus更新一个字段(类型为LocalDateTime)为null,但是数据库依旧是之前的时间,没有更新为null成功

  2. 查找问题:由 MyBatis-Plus 的字段更新策略(FieldStrategy)所决定的默认行为,即默认情况下,MyBatis-Plus 使用 FieldStrategy.NOT_NULL,即自动跳过所有 null 值字段,导致无法更新为 null

  3. 解决方案:

  4. 方案一:通过 @TableField 注解修改单个字段的更新策略

    java 复制代码
    @TableField(value = "out_start_date", insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
        private LocalDateTime outStartDate;
  5. 方案二:使用 UpdateWrapper 显式指定字段更新

    java 复制代码
    barnInfoMapper.update(null, new UpdateWrapper<BarnInfo>().eq("id", 10010L).set("outStartDate", null));
  6. 方案三:全局策略配置:统一管理字段处理行为,在 application.yml 中配置全局字段策略【注意:可能导致意外的 null 写入】

    java 复制代码
    mybatis-plus:
      global-config:
        db-config:
          field-strategy: IGNORED
相关推荐
全栈老石19 分钟前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
SimonKing2 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean2 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven974 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55113 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河13 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程16 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅18 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者19 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq