mybatis-plus升级到3.2.0版本后,出现updateByID方法无法将字段值更新为null的问题,查看sql语句发现mybatis-plus对为null的字段进行了过滤。
查阅资料后发现,3.1.2版本后,field-strategy被弃用,db-config配置项field-strategy=ignore失效,在使用updateByID方法时,mybatis-plus采用默认策略,忽略对null的校验,即""会更新,null不会更新,导致无法更新null。
新版本采用下面三个配置进行非空判断:
三个配置项可选的属性为:ignore(忽略非空判断,null和""都不过滤);not_null(过滤null);not_empty(过滤null和"")。
为了更新null,有如下几种方式:
(1)全局配置,所用更新都不过滤null和""
db-config:
update-strategy: ignored
(2)单字段配置,对该字段更新时不过滤null和""
@ApiModelProperty(value = "所属部门组织机构ID")
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String ssbmzzjg_id;
(3)使用UpdateWrapper来更新(3.0以上版本)
//updateAllColumnById(entity) // 全部字段更新: 3.0已经移除
mapper.update(
new User().setName("mp").setAge(3),
Wrappers.<User>lambdaUpdate()
.set(User::getEmail, null) //把email设置成null
.eq(User::getId, 2)
);
//也可以参考下面这种写法
mapper.update(
null,
Wrappers.<User>lambdaUpdate()
.set(User::getAge, 3)
.set(User::getName, "mp")
.set(User::getEmail, null) //把email设置成null
.eq(User::getId, 2)
);