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
相关推荐
小蒜学长8 分钟前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物
程序员黑豆9 分钟前
Java字符串常量池完全指南:原理、intern()方法与性能优化最佳实践
java·前端·ai编程
AI人工智能+电脑小能手12 分钟前
大白话说Java设计模式-14-适配器模式(业务实战篇)
java·设计模式·适配器模式·系统兼容·多渠道对接
TDengine (老段)23 分钟前
TDengine 第三方工具 — Telegraf、Kafka Connect、Flink、Spark
大数据·数据库·物联网·flink·kafka·时序数据库·tdengine
xbgRS3 小时前
springboot的自动装配
java·spring boot
小白勇闯网安圈9 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨10 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
嘻哈∠※10 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
科技绘图10 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl11 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库