MyBatis-Plus updateById方法更新不了空字符串/null的问题及解决

 更新时间:2026年03月16日 08:51:59   作者:慢慢变富的w  
MyBatis-Plus的updateById()方法在更新字段为null时会失败,因为默认策略不更新null值,文章提供三种解决方案:全局配置忽略判断、使用PO对象的el属性指定jdbcType、通过注解设置字段验证策略为IGNORED

最近遇到了Mybatis-Plus updateById(),更新某一个字段为null,却发现没有更新成功。记录一下

一、简介

因为最近在忙项目,好久都没有更新博客,最近在项目中刚好遇到一个问题,就是在使用MyBatis-Plus updateById(xxx)的时候,居然更新不了字符串或者null,本文分享两种解决方案,具体大家可以根据自己的需求选择一种方法解决。

二、原理

在实际项目中,难免更新的时候,有可能会把已有的值更新成空字符串或者null,但是当你使用updateById()方法的时候,会发现根本不生效。

这其实是MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进行了不是全量更新的策略,查阅官网发现有一个属性:因为笔者使用的是springboot,下面是mybatis-plus配置文件:

    mybatis-plus:
      global-config:
        #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
        field-strategy: 1

这个字段验证策略默认是1, 即NOT NULL,更新的时候做了null判断,默认不更新为null的传参。

field-strategy字段更新插入策略属性说明:
 
IGNORED(0): "忽略判断", 所有字段都更新和插入 
NOT_NULL(1): "非 NULL 判断", 只更新和插入非NULL值  
NOT_EMPTY(2): "非空判断", 只更新和插入非NULL值且非空字符串     
 
DEFAULT:默认NOT_NULL 

field-strategy字段更新插入策略属性说明:

  • IGNORED(0): “忽略判断”, 所有字段都更新和插入
  • NOT_NULL(1): “非 NULL 判断”, 只更新和插入非NULL值
  • NOT_EMPTY(2): “非空判断”, 只更新和插入非NULL值且非空字符串
  • DEFAULT:默认NOT_NULL

三、解决方法

第一种方法:全局配置方式

在MyBatis-Plus配置文件中修改field-strategy字段验证的值为0,即忽略判断。

记住,光设置这个是不会进行判断了,但是你会发现更新插入操作的时候还是会报错,会报jdbcType不允许为空,这个时候,你需要确保你的**PO对象(即@TableField(value=“XSID”)**修饰字段的时候,还需要加入el属性,每个属性对应数据库的jdbcType类型,这样才能成功更新空值或null。

如下图:

第二种方法:如果你设置的字段验证策略为非null判断

这个时候你会发现可以更新空字符串’ ',但是一些比如Date等对象类型的设置空是要设置为null的,你会发现一样更新不了null,

第三种方法:我最常用的方法,通过注解的方式

由于表中的字段基本上都是varchar字符类型的,所以这个时候可以在PO中对类型为对象类型的属性通过注解对对象类型的属性单独设置字段验证策略为IGNORED如下图:

这样就可以成功更新值为null或者空字符串’ '了,问题解决。

总结

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

相关文章

  • java性能优化之分代回收

    java性能优化之分代回收

    这篇文章主要介绍了java性能优化之分代回收,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java设计模式之Iterator模式介绍

    Java设计模式之Iterator模式介绍

    所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。需要的朋友可以参考下
    2013-07-07
  • spring cloud alibaba Nacos 注册中心搭建过程详解

    spring cloud alibaba Nacos 注册中心搭建过程详解

    这篇文章主要介绍了spring cloud alibaba Nacos 注册中心搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • SpringMVC ajax请求的处理方法介绍

    SpringMVC ajax请求的处理方法介绍

    Ajax即异步的 JavaScript和XML,是一种无需重新加载整个网页的情况下,能够更新部分模块的网页技术,下面这篇文章主要给大家介绍了关于SpringMVC Ajax请求的处理,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • SpringBoot中EasyExcel实现Excel文件的导入导出

    SpringBoot中EasyExcel实现Excel文件的导入导出

    这篇文章主要介绍了SpringBoot中EasyExcel实现Excel文件的导入导出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • SpringBoot实现物品点赞功能

    SpringBoot实现物品点赞功能

    这篇文章主要介绍了SpringBoot物品点赞功能实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • SpringBoot3和4的版本新特性及升级要点详解

    SpringBoot3和4的版本新特性及升级要点详解

    Spring Boot 4.0作为生态内的重大更新,基于Spring Framework 6.1+ 构建,带来了一系列颠覆性优化,这篇文章主要介绍了SpringBoot3和4的版本新特性及升级要点的相关资料,需要的朋友可以参考下
    2026-03-03
  • Java实现雪花算法的原理

    Java实现雪花算法的原理

    这篇文章主要介绍了Java实现雪花算法的原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 论java如何通过反射获得方法真实参数名及扩展研究

    论java如何通过反射获得方法真实参数名及扩展研究

    这篇文章主要为大家介绍了java如何通过反射获得方法的真实参数名以及扩展研究,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步早日升职加薪
    2022-01-01
  • JAVA实现经典扫雷游戏的示例代码

    JAVA实现经典扫雷游戏的示例代码

    windows自带的游戏《扫雷》是陪伴了无数人的经典游戏,本程序参考《扫雷》的规则进行了简化,用java语言实现,采用了swing技术进行了界面化处理。感兴趣的可以学习一下
    2022-01-01

最新评论