MyBatis-Plus更新字段为null的处理方案

 更新时间:2025年08月06日 10:45:51   作者:有来技术  
在使用 MyBatis-Plus 进行开发时,我们经常会遇到需要更新或插入字段为 null 的场景,然而,MyBatis-Plus 默认会忽略 null 值字段,导致这些字段不会被更新或插入到数据库中,本文将详细介绍如何解决 MyBatis-Plus 更新字段为 null 的问题,需要的朋友可以参考下

无废话

@TableField(insertStrategy = FieldStrategy.IGNORED,updateStrategy= FieldStrategy.IGNORED)

在使用 MyBatis-Plus 进行开发时,我们经常会遇到需要更新或插入字段为 null 的场景。然而,MyBatis-Plus 默认会忽略 null 值字段,导致这些字段不会被更新或插入到数据库中。本文将详细介绍如何通过配置 @TableField 注解的字段策略,解决 MyBatis-Plus 更新字段为 null 的问题。

问题背景

在 MyBatis-Plus 中,默认的字段策略是忽略 null 值字段。这意味着:

  • 在插入操作时,如果字段值为 null,则该字段不会被 插入到数据库中。
  • 在更新操作时,如果字段值为 null,则该字段不会被更新到数据库中。

这种默认行为在某些场景下可能会导致问题。例如,当我们希望将某个字段的值更新为 null 时,MyBatis-Plus 会忽略该操作,导致字段值未被正确更新。

解决方案

MyBatis-Plus 提供了 @TableField 注解,通过配置 insertStrategyupdateStrategy 属性,可以灵活控制字段的插入和更新策略。

1. 配置 @TableField 注解

通过在实体类的字段上添加 @TableField 注解,并设置 insertStrategyupdateStrategyFieldStrategy.IGNORED,可以强制 MyBatis-Plus 在插入和更新时处理 null 值字段。

@Data
@TableName("user")
public class User {
    private Long id;
    private String name;

    @TableField(
        insertStrategy = FieldStrategy.IGNORED,  // 插入时忽略字段是否为 null
        updateStrategy = FieldStrategy.IGNORED   // 更新时忽略字段是否为 null
    )
    private String email;  // 允许为 null
}

关键点解释:

  • insertStrategy = FieldStrategy.IGNORED
    • 在插入操作时,即使字段值为 null,也会将该字段插入到数据库中。
  • updateStrategy = FieldStrategy.IGNORED
    • 在更新操作时,即使字段值为 null,也会将该字段更新到数据库中。

2. 其他字段策略

MyBatis-Plus 提供了多种字段策略,可以根据实际需求选择:

  • FieldStrategy.DEFAULT:默认策略,跟随全局配置。
  • FieldStrategy.IGNORED:忽略字段是否为 null,始终插入或更新。
  • FieldStrategy.NOT_NULL:字段为非 null 时才插入或更新。
  • FieldStrategy.NOT_EMPTY:字段为非空(非 null 且非空字符串)时才插入或更新。
  • FieldStrategy.NEVER:始终不插入或更新该字段。

3. 全局配置

如果你希望全局配置字段策略,可以在 MyBatis-Plus 的全局配置中设置:

mybatis-plus:
  global-config:
    db-config:
      insert-strategy: ignored  # 全局插入策略
      update-strategy: ignored  # 全局更新策略

通过全局配置,可以避免在每个字段上单独设置 @TableField 注解,简化代码。

示例场景

假设有一个用户表 user,其中 email 字段允许为 null。我们希望:

  • 在插入操作时,即使 emailnull,也能插入到数据库中。
  • 在更新操作时,即使 emailnull,也能更新到数据库中。

实体类配置如下:

@Data
@TableName("user")
public class User {
    private Long id;
    private String name;

    @TableField(
        insertStrategy = FieldStrategy.IGNORED,
        updateStrategy = FieldStrategy.IGNORED
    )
    private String email;  // 允许为 null
}

注意事项

数据库约束

  • 如果数据库字段设置为 NOT NULL,即使配置了 IGNORED 策略,插入或更新 null 值时仍会抛出数据库异常。
  • 确保数据库字段允许 null 值。

性能影响

  • 使用 IGNORED 策略可能会导致不必要的字段更新(即使值未变化),需根据实际场景权衡。

总结

通过配置 @TableField 注解的 insertStrategyupdateStrategy 属性,我们可以灵活控制 MyBatis-Plus 对 null 值字段的处理行为。无论是全局配置还是字段级别的配置,都能有效解决更新字段为 null 的问题。在实际开发中,建议根据具体需求选择合适的字段策略,并注意数据库约束和性能影响。

以上就是MyBatis-Plus更新字段为null的处理方案的详细内容,更多关于MyBatis-Plus更新字段为null的资料请关注脚本之家其它相关文章!

相关文章

  • Java String中的split方法使用总结

    Java String中的split方法使用总结

    这篇文章主要介绍了Java String中的split方法使用总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java Swing实现自定义按钮组件的完整代码

    Java Swing实现自定义按钮组件的完整代码

    本文介绍了Java Swing按钮工具类,用于简化按钮创建,它封装了多种按钮样式、图标及事件处理,支持悬停效果,开发者仅需一行代码即可创建规范按钮,大幅提升开发效率,文中附有完整源码
    2026-05-05
  • SpringBoot迁移Spring的踩坑记录与解决方案详解

    SpringBoot迁移Spring的踩坑记录与解决方案详解

    本文结合了真实的SpringBoot迁移Spring经历,整理了 6 类高频踩坑场景,每个都附有错误写法,报错现象,根因分析和正确做法,直接拿去对照自查
    2026-04-04
  • Java数据类型的规则

    Java数据类型的规则

    这篇文章主要介绍了Java数据类型的规则的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Java并发包之CopyOnWriteArrayList类的深入讲解

    Java并发包之CopyOnWriteArrayList类的深入讲解

    这篇文章主要给大家介绍了关于Java并发包之CopyOnWriteArrayList类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • SpringBoot3中数据库集成实践详解

    SpringBoot3中数据库集成实践详解

    项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,所以下面小编就来和大家讲讲SpringBoot3如何实现数据库集成,需要的可以参考下
    2023-08-08
  • SpringBoot事务注解@Transactional失效场景与解决方案

    SpringBoot事务注解@Transactional失效场景与解决方案

    开发中我们经常会用到 Spring Boot 的事务注解,但往往会出现使用了 @Transactional 注解但是没有生效的情况,下面就把这几种不能生效的情况整理一下吧
    2025-08-08
  • java-springboot3.2+多数据源+hikari连接池的配置使用

    java-springboot3.2+多数据源+hikari连接池的配置使用

    本文给大家介绍java-springboot3.2+多数据源+hikari连接池的配置使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-11-11
  • SpringCloud项目中配置RocketMQ的实现步骤

    SpringCloud项目中配置RocketMQ的实现步骤

    本文主要介绍了SpringCloud项目中配置RocketMQ的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • java中JDBC实现往MySQL插入百万级数据的实例代码

    java中JDBC实现往MySQL插入百万级数据的实例代码

    这篇文章主要介绍了java中JDBC实现往MySQL插入百万级数据的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01

最新评论