MyBatis-Plus updateById方法更新不了空字符串/null的问题及解决
最近遇到了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或者空字符串’ '了,问题解决。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
spring cloud alibaba Nacos 注册中心搭建过程详解
这篇文章主要介绍了spring cloud alibaba Nacos 注册中心搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-10-10
SpringBoot中EasyExcel实现Excel文件的导入导出
这篇文章主要介绍了SpringBoot中EasyExcel实现Excel文件的导入导出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10


最新评论