關於Mybatis-Plus中update()、updateById()方法的使用及null值的判斷
阿新 • • 發佈:2022-12-06
使用場景說明:
在 Mybatis-Plus 的使用過程中,經常會遇對資料庫更新的情況
更新常用方法:update()、updateById()
問題:經常會遇見對 null 值的處理,對傳入的實體引數中的 null 值會有以下需求
- 有的場景需要將實體entity 中的 null 值更新到資料庫中對應欄位上
- 有的場景需要對值為 null 的欄位忽略,只對有值的欄位進行更新
而再結合 update 、updateById 就容易混淆兩種需求場景的使用。
本文就此問題,詳細記錄下 結合兩種 update 方法,以及兩種場景,做詳細說明
1、MyBatis-Plus 中的策略介紹
MyBatis-Plus 對欄位 null 值的處理是有如下三種策略
mybatis-plus FieldStrategy:
- IGNORED:0 忽略 (不做值的判斷,對所有欄位更新,即使是 null 和 空,也會更新欄位)
- NOT_NULL:1 非 NULL,預設策略 (對欄位值為非 null 的欄位做更新)
- NOT_EMPTY:2 非空 (對欄位為非空的欄位做更新, null 和 空 均不更新)
2、updateById 的使用
預設情況下:
更新策略為 NOT_NULL,當傳入的欄位值為非null 時,欄位更新。也就是說,有值 或者 空會更新, null 不會更新
如何實現將值為 null 的欄位,資料庫中欄位更新為 null
-
通過修改 mybatis-plus 的全域性更新策略實現
修改配置檔案#properties檔案格式:
mybatis-plus.global-config.db-config.field-strategy=ignored
#yml檔案格式:
mybatis-plus:
global-config:
#欄位策略 0:"忽略判斷",1:"非 NULL 判斷",2:"非空判斷"
field-strategy: 0修改為 ignored ,不會對欄位做判斷,傳入什麼,資料庫中欄位就更新為什麼
因為是全域性修改,容易出現問題,所以 不推薦修改全域性策略 -
通過修改欄位註解實現
在實體 entity 中,對需要實現 null 可更新資料庫的欄位新增 @TableField,並修改屬性 updateStrategy// 將更新策略修改為 ignore
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Date patchedDate;
3、update 的使用
- update 結合 UpdateWrapper 使用,可以對需要設定為 null 的欄位,直接 set