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)注解添加在字段上

MybatisPlus更新时会自动忽略传值为NULL的字段_第1张图片

在枚举FieldStrategy中有五个属性如下

MybatisPlus更新时会自动忽略传值为NULL的字段_第2张图片

updateStrategy说明

MybatisPlus更新时会自动忽略传值为NULL的字段_第3张图片

2.2 在需要修改的实体类字段上加上@TableField(fill = FieldFill.INSERT_UPDATE)注解

MybatisPlus更新时会自动忽略传值为NULL的字段_第4张图片

FieldFill枚举说明

MybatisPlus更新时会自动忽略传值为NULL的字段_第5张图片

fill策略说明

MybatisPlus更新时会自动忽略传值为NULL的字段_第6张图片
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);

缺点:相对来说较为繁琐,但解决了第一个方法出现的问题

你可能感兴趣的:(#,java工具,java)