解决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;
     }

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

总结

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

相关文章

  • Java自学书籍Top 10

    Java自学书籍Top 10

    这篇文章主要为大家推荐了Java书籍Top 10,是由Java Inside推荐的十本不错的Java书籍,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 基于@LastModifiedDate不起作用的解决方案

    基于@LastModifiedDate不起作用的解决方案

    这篇文章主要介绍了基于@LastModifiedDate不起作用的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Java基础之创建虚拟机对象的过程详细总结

    Java基础之创建虚拟机对象的过程详细总结

    本文基于虚拟机HotSpot和常用的内存区域Java堆深入对象分配、布局和访问的全过程,文中有非常详细的图文解说,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • java引用类型WeakReference用法及原理详解

    java引用类型WeakReference用法及原理详解

    Java弱引用(WeakReference)是一种特殊的引用类型,当垃圾回收器运行时,无论内存是否充足,只要发现对象仅被弱引用指向,就会立即回收该对象,这篇文章主要介绍了java引用类型WeakReference用法及原理的相关资料,需要的朋友可以参考下
    2026-01-01
  • 浅谈Java中的URL和URLConnection

    浅谈Java中的URL和URLConnection

    这篇文章主要介绍了浅谈Java中的URL和URLConnection,URL代表的是一种资源,它使用的是统一资源定位格式, 其实我们还可以用URL来构造对象的,java中有大量的构造函数允许使用一个个的分串来指定URL,需要的朋友可以参考下
    2023-08-08
  • JAVA 区分集合和数组

    JAVA 区分集合和数组

    这篇文章主要介绍了JAVA如何区分集合和数组,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java开发之spring security实现基于MongoDB的认证功能

    Java开发之spring security实现基于MongoDB的认证功能

    这篇文章主要介绍了Java开发之spring security实现基于MongoDB的认证功能,结合实例形式分析了spring security在非JDBC环境下的自定义认证服务实现技巧,需要的朋友可以参考下
    2017-11-11
  • Java函数式编程之通过行为参数化传递代码

    Java函数式编程之通过行为参数化传递代码

    行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式,这篇文章将给大家详细的介绍一下Java函数式编程之行为参数化传递代码,感兴趣的同学可以参考阅读下
    2023-08-08
  • Java中的OkHttp使用教程

    Java中的OkHttp使用教程

    OkHttp是目前非常火的网络库,OKHttp与HttpClient类似,也是一个Http客户端,提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能,本文重点给大家介绍Java OkHttp使用,感兴趣的朋友一起看看吧
    2022-04-04
  • Java基于BIO实现文件上传功能

    Java基于BIO实现文件上传功能

    这篇文章主要为大家详细介绍了Java基于BIO实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论