1. 程式人生 > 其它 >關於Mybatis-Plus中update()、updateById()方法的使用及null值的判斷

關於Mybatis-Plus中update()、updateById()方法的使用及null值的判斷

使用場景說明:


在 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