Mybatisplus 使用updateBatchById()方法无法更新为null的字段

一、问题:

    今天在开发中遇见一个问题就是当我使用mybatisplus的updateBatchById方法时,我将表的某一个属性值赋null,然后调用updateBatchById方法,返回true,去数据库一查数据,却发现数据还是原来的值。

二、原因:

   该问题其实是MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进行了不是全量更新的策略,如果对某字段赋值为null了,那么updateBatchById()更新时自动忽略该字段。

三、解决

     通过上网查询并结合自己项目实际情况,解决方法就是通过注解来去掉忽略,但是由于MyBatis-Plus版本更新,因此不同版本使用的注解形式不同。

  3.1.2版本之前使用: @TableField(strategy = FieldStrategy.IGNORED)

  3.1.2版本后使用:@TableField(updateStrategy = FieldStrategy.IGNORED)

   @TableField(updateStrategy = FieldStrategy.IGNORED)

    private String packageId;

Mybatisplus 使用updateBatchById()方法无法更新为null的字段

Mybatisplus 使用updateBatchById()方法无法更新为null的字段

四、扩展

    看网上资料说3.1.2版本之前使用: @TableField(strategy = FieldStrategy.IGNORED) 的时候需要注意一下问题:如果你的代码中,有某些方法只需要更改一两个字段,并且这些字段不包括你加了注解的这个字段的话,一定要先查询一遍你的这条数据,在这个实体上更新你的数据,不然你加了注解的字段会因为你没有赋值就给你置空了。