Mybatis-Plus使用 updateById或updateBatchById 更新字段為null 不更新問題


問題:

最近一次在寫個需求的時候,需要更新數據庫字段,使用了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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM