MybatisPlus更新时会自动忽略传值为NULL的字段
三种方案解决MybatisPlus更新时会自动忽略传值为NULL的字段
- 一、背景
- 二、解决方案
- 2.1 使用`@TableField(updateStrategy = FieldStrategy.IGNORED)`注解添加在字段上
- 在枚举`FieldStrategy`中有五个属性如下
- `updateStrategy`说明
- 2.2 在需要修改的实体类字段上加上`@TableField(fill = FieldFill.INSERT_UPDATE)`注解
- `FieldFil`l枚举说明
- `fill`策略说明
一、背景
最近在项目中使用定时任务同步数据,将一张表中的数据同步到另一张表,使用mybatisplus的自带封装的update的方法时,修改的某个字段为null时,会自动忽略我这个字段,导致这个字段还是原来未修改的值。
现在需要将属性中为null的也更新到表中
二、解决方案
2.1 使用@TableField(updateStrategy = FieldStrategy.IGNORED)
注解添加在字段上
在枚举FieldStrategy
中有五个属性如下
updateStrategy
说明
2.2 在需要修改的实体类字段上加上@TableField(fill = FieldFill.INSERT_UPDATE)
注解
FieldFil
l枚举说明
fill
策略说明
2.重写mybatisPlus封装的update的方法,在需要传null值的字段加上以下操作,这是从其他的博文中找到的,自己没试过
UpdateWrapper<Student> stuUpdate = new UpdateWrapper<>();
stu.setStuGender(null);
stuUpdate.lambda().set(Student::getStuGender, stu.getStuGender()).eq(Student::getId, stu.getId());
studentService.update(stuUpdate);
缺点:相对来说较为繁琐,但解决了第一个方法出现的问题
还没有评论,来说两句吧...