Mybatis-Plus 解决 updateById 更新 null 值无效问题

Chloe
Chloe
发布时间:2026-10-13| 3人浏览过
原创

在使用 Mybatis-Plus 进行数据更新时,若实体字段值为 null,默认策略下数据库不会变更该字段。本文详解通过配置全局 field-strategy 或在实体类字段上使用 @TableField(strategy = FieldStrategy.IGNORED) 注解,强制更新 null 值,解决前端清空字段后后端无法同步的问题。

问题现象:updateById 更新 null 值失效

在前端开发中,用户修改数据时可能会删除某些属性内容。此时前端通常会将该字段设置为 null 提交给后端。然而,当后端接收该对象并调用 updateById()

具体场景如下:

  1. 原始数据中 name 为 "tt"。
  2. 前端页面删除该属性,向后端发送 { name: null }。
  3. 后端接收参数 name: null。
  4. 调用 updateById(entity) 执行更新。
  5. 结果:数据库中 name 字段依然为 "tt",未被更新为空或 null。

原因分析:Mybatis-Plus 的 FieldStrategy 机制

Mybatis-Plus 为了简化 SQL 编写,默认提供了三种字段更新策略(FieldStrategy)。在默认的 NOT_NULL 策略下,框架在生成 UPDATE 语句时会忽略所有值为 null 的字段,以防止意外覆盖数据库中的原有数据。

FieldStrategy 包含以下三种枚举值:

  • IGNORED:忽略判断,无论字段是否为空都参与更新。
  • NOT_NULL:非 NULL 检查,默认策略。仅当字段不为 null 时才生成对应的 SQL 列更新操作。
  • NOT_EMPTY:非空检查。不仅要求字段不为 null,还要求字符串等类型不为空字符串,才参与更新。
public enum FieldStrategy {
    IGNORED,//参数为空也更新到数据库
    NOT_NULL,//参数不能为null,默认策略
    NOT_EMPTY;//参数不能为空
}

解决方案一:全局配置 field-strategy

如果项目中存在大量需要更新 null 值的场景,可以通过全局配置文件统一设置策略,避免在每个字段上重复添加注解。将全局策略调整为 IGNORED,即可让所有未特殊标注的字段在值为 null 时也能更新。

在全局配置中添加如下参数:

注意风险:此方法会将影响所有实体的更新行为。对于某些不应被覆盖的业务字段(如创建时间、状态码等),可能导致意外更改。建议在明确业务逻辑允许的情况下使用,或配合局部注解进行精细化控制。

解决方案二:局部注解指定策略

若只想针对特定字段允许更新 null 值,推荐在实体类的对应字段上添加 @TableField 注解,并显式指定 strategy = FieldStrategy.IGNORED。这是最安全且精确的控制方式。

操作步骤:

  1. 定位实体类:找到需要支持 null 更新的 Java 实体类文件。
  2. 添加注解:在目标字段上方添加 @TableField(strategy = FieldStrategy.IGNORED)。同时可配合 value 属性指定数据库列名(若列名与字段名不一致)。

代码示例:

@Data
public class UserEntity {
    private Long id;

    // 指定该字段即使为 null 也会更新到数据库
    @TableField(strategy = FieldStrategy.IGNORED, value="name")
    private String name;
    
    // 其他字段保持默认策略(NOT_NULL)
    private String email;
}

经过上述配置后,再次调用 updateById(),带有 IGNORED 策略的 name 字段即使是 null,也会正常生成 SQL 并更新到数据库中。

总结

Mybatis-Plus 默认忽略 null 值的更新行为是为了保护数据安全,但在处理前端“清空字段”等特定需求时会造成困扰。开发者应根据实际业务场景,选择全局配置 field-strategy=IGNORED 或在关键实体字段上使用 @TableField(strategy = FieldStrategy.IGNORED) 来解决问题。局部注解的方式更具备灵活性和安全性,推荐在多数场景下使用。

以上就是 Mybatis-Plus 解决 updateById 更新 null 值无效问题的详细内容,更多关于 Mybatis-Plus 更新策略的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。