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

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

1、问题

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

2、解决办法

  • 为字段配置注解

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

在这里插入图片描述

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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术路上的探险家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值