因为最近在忙项目,好久都没有更新博客,最近在项目中刚好遇到一个问题,就是在使用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
三、解决方法
【第一种方法】:全局配置方式
在MyBatis-Plus配置文件中修改field-strategy字段验证的值为0,即忽略判断。
记住,光设置这个是不会进行判断了,但是你会发现更新插入操作的时候还是会报错,会报jdbcType不允许为空,这个时候,你需要确保你的
PO对象(即@TableField(value="XSID")
修饰字段的时候,还需要加入
el
属性,每个属性对应数据库的jdbcType类型,这样才能成功更新空值或null。如下图:
【第二种方法】:如果你设置的字段验证策略为非null判断
这个时候你会发现可以更新空字符串' ',但是一些比如Date等对象类型的设置空是要设置为null的,你会发现一样更新不了null,
由于表中的字段基本上都是varchar字符类型的,所以这个时候可以在PO中对类型为对象类型的属性通过注解对对象类型的属性单独设置字段验证策略为
not null
,如下图:
这样就可以成功更新值为null或者空字符串' '了,问题解决。
以上是笔者在实际项目中遇到mybatis-plus更新操作不生效的问题总结以及解决方案,读者可以根据具体需求选择适合自己的一种解决方法,希望能对大家有所帮助。
一、简介因为最近在忙项目,好久都没有更新博客,最近在项目中刚好遇到一个问题,就是在使用MyBatis-Plus updateById(xxx)的时候,居然更新不了字符串或者null,本文分享两种解决方案,具体大家可以根据自己的需求选择一种方法解决。二、原理在实际项目中,难免更新的时候,有可能会把已有的值更新成空字符串或者null,但是当你使用updateById()方法的时候,会发现根...
开发项目中,使用
MyBatis-Plus
的
update
ById
()
方法
将查询结果中原本不为
null
的字段
更新
为
null
,该字段设置可为
null
。发现
更新
失败。
mybatis-plus
FieldStrategy 有三种策略:
IGNORED:0 忽略
NOT_
NULL
:1 非
NULL
,默认策略
NOT_EMPTY:2 非
空
而默认
更新
策略是NOT_
NULL
:非
NULL
;即通过接口
更新
数据时数据为
NULL
值时将不
更新
进数据库。
解决
方案
1、写s...
org.
mybatis
.spring.
MyBatis
SystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘
null
’ in ‘class com.XXX.XXX.entity.XXX’
因为
MyBatis-Plus
自带的
更新
方法
,都有对对象
空
值进行判
空
。只有不为
空
的字段才会进行数据
更新
。想要给
1.
Mybatis
Plus 的 FieldStrategy 有三种策略2. 配置3. 使用
update
()
方法
1.
Mybatis
Plus 的 FieldStrategy 有三种策略
IGNORED:忽略。当策略为 IGNORED 时,表示忽略该字段的
空
值判断,即无论实体对象的值为
空
还是非
空
,都会进行新增、
更新
操作。
NOT_
NULL
:非
NULL
。当策略为 NOT_
NULL
时,表示字段不能为
空
,如果实体对象的值为
空
,则不会进行新增、
更新
操作。
NOT_EMPTY:非
空
。当策略为 NOT_
1 问题描述
在用
mybatis-plus
封装的
update
ById
方法
来
更新
数据时,想把一个字段设置为
null
值,但是发现
更新
后数据没有为
null
还是原来的值,这是因为
mybatis-plus
在
更新
的时候做了
null
判断,默认不
更新
为
null
的传参。
2
解决
方法
(1)在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略
null
值的判断,例如
* 治愈时间
@TableField(
update
Strategy = Fie
mybatis-plus
:
global-config:
#字段策略 0:"所有字段都
更新
和插入" 1:"只
更新
和插入非
NULL
值" 2:"只
更新
和插入非
NULL
值且非
空
字符串
"
field-strategy: 1
1. 你还需要在字段上配置el
2. 另外有些不想修改的字段,在传值的时候没传过来也会被
更新
为
NULL
。
方法
二、加注解
最快
解决
问题的方式,实际上是在对应的字段上面,增加以下注解:
一、背景描述
项目所有技术栈,spring boot (2.1.5.RELEASE) +
mybatis-plus
(3.3.1.tmp) + 其他。重点是这里使用了
mybatis-plus
。
由于享受了懒人福利(不写或者少写sql语句),但是也或多或少的踩了一些别人没有踩到的坑。比如今天在使用
mybatis-plus
upda
最近在项目中,做高级搜索时,由于搜索条件过多,而且每个选项的值都很多,这些条件都需要拼接到sql语句IN查询中,所以我前端直接传递逗号分隔的多个值,直接使用
Mybatis
的foreach切割功能,直接查询,感觉挺方便的。
二、使用方式
【a】前端传递查询条件:使用逗号分隔参数值。
【b】后端Mapper接口使用Map接收接收:
public List<FjcwxxT...
一、问题描述
最近在做项目时,需要使用
Mybatis
的ResultMap高级映射查询“校区 - 楼栋 - 楼层”树结构的数据,前端提供很多过滤条件都是子查询楼层的一些字段属性,并不是所有的参数都是最外层查询的过滤条件,但是ResultMap本身不支持将参数从外层的查询一直传递到子查询。
举个简单的例子,mapper接口传递了一些参数到mapper.xml中,如果不额外处理,这些参数只能在最外面...
String name = "Tom";
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ne(StringUtils.isNotBlank(name), "name", name);
// 说明:
// 1. StringUtils.isNotBlank(str) 判断
字符串
str 是否不为
空
、不为
null
、不为全
空
格
字符串
// 2. ne(boolean condition, String column, Object val) 表示当 condition 为 true 时,才添加相应的查询条件
// 3. 在上述代码中,只有 name 不为
空
时,才会添加 name 不等于指定值的查询条件
这样可以实现根据
字符串
进行不等于判断的查询。需要注意的是,StringUtils 是 Apache Commons Lang3 中的工具类,需要添加相应的依赖。