如何解决 MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题

如何解决 MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题

  • 1、问题
  • 2、解决办法
  • 3、总结

1、问题

使用Mybatis-plusupdateById去更新实体类的时候,如果实体类中的某个字段为null,会导致为null的字段不做更新操作

2、解决办法

  • 为字段配置注解

@TableField(updateStrategy = FieldStrategy.IGNORED) 是 MyBatis-Plus框架的注解,用于定义数据库表字段在更新操作中的策略。在 MyBatis-Plus 中,@TableField注解用于标识实体类中与数据库表字段对应的属性。其中,updateStrategy 属性决定了该字段在执行更新操作时的处理策略。

如何解决 MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题_第1张图片

FieldStrategy 是 MyBatis-Plus 框架中的一个枚举类,用于定义字段更新策略。该枚举类包含以下几个常量:
IGNORED:意思是"忽略判断",所有值都更新和插入。
NOT_NULL:当字段为 null 时不进行更新。
NOT_EMPTY:当字段为 null 或空字符串时不进行更新。
DEFAULT:使用数据库默认值进行更新。
NEVER:永远不更新字段的值。

例如,假设有一个实体类 User,其中有一个属性 name 对应数据库表的字段名为 name

public class User {
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String name;
    // 其他属性和方法...
}

在执行更新操作时,如果只想更新实体类中的字段为null时也可以更新,可以使用如下方式:

User user = new User();
user.setId(1L);
user.setAge(25);
user.setName(null)
// name 字段为null,也可以更新name 字段
userService.updateById(user);

需要注意的是,@TableField(updateStrategy = FieldStrategy.IGNORED) 注解只对更新操作生效,对插入操作不生效。如果需要忽略某个字段的插入操作,可以使用其他注解或在插入时手动设置为 null

  • 全局配置

mybatis-plus.global-config.db-config.update-strategy=ignored 是 MyBatis-Plus 的全局配置属性,用于设置全局的更新策略。在 MyBatis-Plus 中,可以通过全局配置来设置一些共享的属性和行为。其中,db-config 是一个子属性,可以用于配置数据库相关的属性,比如 update-strategyupdate-strategy 属性可以设置默认的更新策略。ignored 表示所有值都更新和插入,要在应用中使用该全局配置,需要在 MyBatis-Plus 的配置文件(通常为 application.ymlapplication.properties)中添加以下配置:

mybatis-plus:
  global-config:
    db-config:
      update-strategy: ignored

这样,在整个应用程序中,所有值都更新和插入

需要注意的是,全局配置对应用程序中所有的实体类都生效,如果某些实体类需要自定义不同的更新策略,可以在实体类上直接使用,@TableField 注解,并设置不同的 updateStrategy 属性。这样,实体类级别的配置会覆盖全局的配置。

3、总结

如果字段为null也支持更新操作,则可以:

  • 在字段上加注解
#如果在更新操作时,如果字段为null,也要进行更新操作
@TableField(updateStrategy = FieldStrategy.IGNORED)
  • 全局配置
#如果在更新操作时,如果字段为null,也要进行更新操作
mybatis-plus.global-config.db-config.update-strategy=ignored

你可能感兴趣的:(解决方案,JAVA,mybatis,数据库,java)