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

Posted by 冷眼樵夫 on 01-14,2020

最近遇到了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,即忽略判断。
file
记住,光设置这个是不会进行判断了,但是你会发现更新插入操作的时候还是会报错,会报jdbcType不允许为空,

这个时候,你需要确保你的PO对象(即@TableField(value="XSID")修饰字段的时候,还需要加入el属性,每个属性对应数据库的jdbcType类型,这样才能成功更新空值或null。如下图:
file

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

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

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

file

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


2评论
  • donespeak

    第一眼,XSID会不会有特殊意义;再看一下,原来是乱写的;看了一下注解,额...是中文名称首字母

    • 冷眼樵夫 博主

      @donespeak ⌇●﹏●⌇举个栗子呲牙.png