問題:
最近一次在寫個需求的時候,需要更新數據庫字段,使用了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也會更新表中的數據
拓展
新版本采用如下三個注解來進行配置
insertStrategy
類型:
com.baomidou.mybatisplus.annotation.FieldStrategy
默認值:
NOT_NULL
updateStrategy
類型:
com.baomidou.mybatisplus.annotation.FieldStrategy
默認值:
NOT_NULL
selectStrategy
類型:
com.baomidou.mybatisplus.annotation.FieldStrategy
默認值:
NOT_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();