MyBatis Plus更新策略@TableField(strategy=FieldStrategy.IGNORED)null值字段屬性

前言

最近在項目中遇到一個問題,就是在實體MyBatis Plus updateById(xxx)的時候,如果將某個字段設置爲null,是更新不了字符串爲null的, 本文分享兩種解決方案,具體大家可以根據自己的需求選擇一種方法解決。

MyBatis Plus更新策略

在實際項目中,我們再很多場景下需要將某些字段設置更新爲null, 但是當你使用updateById()方法的時候,會發現根本不生效。這其實是MyBatis-Plus對字段的驗證策略導致的,MyBatis-Plus默認進行了不是全量更新的策略:

mybatis-plus:
  global-config:
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 1

這個字段驗證策略默認是1, 即NOT NULL,更新的時候做了null判斷,默認不更新爲null的傳參。

field-strategy字段更新插入策略屬性說明:
 
IGNORED(0): "忽略判斷", 所有字段都更新和插入 
NOT_NULL(1): "非 NULL 判斷", 只更新和插入非NULL值  
NOT_EMPTY(2): "非空判斷", 只更新和插入非NULL值且非空字符串     
 
DEFAULT:默認NOT_NULL 

解決方法

第一種方法:全局配置方式

在MyBatis-Plus配置文件中修改field-strategy字段驗證的值爲0,即忽略判斷(null值或非null值都更新)。

#mybatis plus 設置
mybatis-plus:
  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml
  global-config:
    # 關閉MP3.0自帶的banner
    banner: false
    # 字段更新策略0:"忽略判斷",1:"非NULL判斷",2:"非空判斷"
    field_strategy: 0
    db-config:
      #主鍵類型  0:"數據庫ID自增",1:"該類型爲未設置主鍵類型", 2:"用戶輸入ID",3:"全局唯一ID (數字類型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
      id-type: ASSIGN_ID
      # 默認數據庫表下劃線命名
      table-underline: true
      logic-delete-field: deleted  # 全局邏輯刪除的實體字段名
      logic-delete-value: 1 # 邏輯已刪除值(默認爲 1)
      logic-not-delete-value: 0 # 邏輯未刪除值(默認爲 0)
  configuration:
    # 這個配置會將執行的sql打印出來,在開發或測試的時候可以用
    # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 返回類型爲Map,顯示null對應的字段
    call-setters-on-nulls: true

第二種方法:在需要設置的字段指定對應的更新策略

這樣就可以成功更新爲null或者空字符串''的值了~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章