解决Mybatis-Plus更新方法不更新NULL字段的问题

 更新时间:2023年12月08日 09:28:59   作者:@会飞的羊  
这篇文章主要介绍了解决Mybatis-Plus更新方法不更新NULL字段的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Mybatis-Plus更新方法不更新NULL字段

使用Mybatis-Plus中提供的updateById方法时遇到的一些问题,分享出来,避免大家踩坑,想将查询结果中某个字段更新为null,但结果该字段更新失败,执行更新方法后还是查询的原来的结果,没有变。

查询Mybatis-Plus的FieldStrategy:

由图中可以看到,更新策略支持5种类型:默认是追随全局配置globalConfig,

mybatis-plus:
  ......
  configuration:
    ......
  global-config:
    ......
    db-config:
      ......

如果没有进行全局配置的话,会采用NOT_NULL的更新策略(sql上会加上不为NULL的判断)。

解决办法

1.设置全局的field-strategy(默认追随全局配置)

yml文件配置如下:

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

这样做是全局性配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。

2.在属性上添加单独的更新策略

/**
 * 申报组织
 */
@ApiModelProperty("申报组织")
@ExcelProperty(value = "申报组织", converter = DeptConverter.class)
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String reportingOrganization;

在更新代码中,我们直接使用mybatis-plus中的updateById方法便可以更新成功

3.使用UpdateWrapper方式更新

在mybatis-plus中,除了updateById方法,还提供了一个update方法

// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);

直接使用update方法也可以将字段设置为null,代码如下:

 /**
  * update更新字段为null
  * @param id
   * @return
   **/
      @Override
      public boolean updatePatentById(Integer id) {
     Patent patent = 			Optional.ofNullable(patentMapper.selectById(id)).orElseThrow(RuntimeException::new);
     LambdaUpdateWrapper<Patent> Wrapper = new LambdaUpdateWrapper<>();
     Wrapper.set(Patent::getCreateTime,null);
     Wrapper.set(Patent::getCreateUser,123);
    Wrapper.eq(Patent::getId,patent.getId());
    int i = patentMapper.update(patent, Wrapper);
    return i==1;
     }

这种方式对其他方法没有影响,不需要修改全局配置,也不需要在字段上单独加注解,推荐使用该方式。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用JDBC的PrepareStatement打印真实SQL的方法详解

    利用JDBC的PrepareStatement打印真实SQL的方法详解

    PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • java实现饮料自助售货机

    java实现饮料自助售货机

    这篇文章主要为大家详细介绍了java实现饮料自助售货机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Spring装配Bean教程之XML安装配置bean详解

    Spring装配Bean教程之XML安装配置bean详解

    大家都知道spring有多重配置方式,基于XML,基于注解,基于java类的配置,其中基于XML是最强大的一种,下面这篇文章主要给大家介绍了关于Spring装配Bean之XML安装配置bean的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • Java如何解决发送Post请求报Stream closed问题

    Java如何解决发送Post请求报Stream closed问题

    这篇文章主要介绍了Java如何解决发送Post请求报Stream closed问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • SpringBoot如何整合nacos详解

    SpringBoot如何整合nacos详解

    今天教各位小伙伴SpringBoot是如何整合nacos的,文中有非常详细的代码示例,对正在学习Java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-06-06
  • Java Timer与TimerTask类使程序计时执行

    Java Timer与TimerTask类使程序计时执行

    这篇文章主要介绍了Java定时器中的Timer和TimerTask的原理。Timer主要用于Java线程里指定时间或周期运行任务,它是线程安全的,但不提供实时性(real-time)保证。接下来就跟随小编一起深入了解Timer和TimerTask吧
    2022-02-02
  • Java排序之冒泡排序的实现与优化

    Java排序之冒泡排序的实现与优化

    冒泡排序是一种简单的交换排序。之所以叫做冒泡排序,因为我们可以把每个元素当成一个小气泡,根据气泡大小,一步一步移动到队伍的一端,最后形成一定对的顺序。本文将利用Java实现冒泡排序,并进行一定的优化,希望对大家有所帮助
    2022-11-11
  • SpringBoot配置连接两个或多个数据库的实现

    SpringBoot配置连接两个或多个数据库的实现

    本文主要介绍了SpringBoot配置连接两个或多个数据库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • java实现文件夹解压和压缩

    java实现文件夹解压和压缩

    这篇文章主要为大家详细介绍了java实现文件夹解压和压缩,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • RocketMQ设计之同步刷盘

    RocketMQ设计之同步刷盘

    这篇文章主要介绍了RocketMQ设计之同步刷盘,文章主要通过CommitLog的handleDiskFlush方法展开全文内容,实现同步刷盘,下面文章详细介绍,需要的小伙伴可以参考一下
    2022-03-03

最新评论