最近一次在写个需求的时候,需要更新数据库字段,使用了Mybatis-Plus中的updateById方法,发现当前端传过来是Null值的时候,出现updateByID方法无法将字段值更新为null的问题,经验证,updateBatchById方法同样无法更新null值。

在控制台打印sql语句时,发现mybatis-plus对为null的字段进行了过滤。

查阅资料后发现,3.1.2版本后,field-strategy被弃用,db-config配置项field-strategy=ignore失效,在使用updateByID方法时,mybatis-plus采用默认策略,忽略对null的校验,即""会更新,null不会更新,导致无法更新null。

在需要字段上加上 @TableField(strategy = FieldStrategy.IGNORED) 注解,就会忽略为空的判断,将该字段设置为null也会更新表中的数据

IGNORED,忽忽略非空判断,null和""都不过滤

DEFAULT, 默认

NOT_EMPTY, 非空判断,为null,为空串的忽略,就是如果设置值为null,"",不会更新数据库

NOT_NULL, 非NULL判断,忽略null的字段,不忽略""

为了更新null,有如下几种方式:

a、全局配置,所用更新都不过滤null和""

1 db-config:
2     update-strategy: ignored

b、单字段配置,对该字段更新时不过滤null和""

1 TableField(updateStrategy = FieldStrategy.IGNORED)
2 private String imgUrl;


c、自定义

1 this.lambdaUpdate()
2     .eq(User::getId, User.getId())
3     .set(User::getName, stageInfo.getName())
4     .update();