【Mybatis-Plus】使用updateById()、update()將字段更新為null或者空


問題背景:

最近測試同學給我提了個bug,字段不能置空,我查看了下項目配置發現是字段級別被設置為NOT_EMPTY導致的。

mybatis-plus FieldStrategy 有三種策略:

1.IGNORED:0 忽略
2.NOT_NULL:1 非 NULL,默認策略
3.NOT_EMPTY:2 非空
而默認更新策略是NOT_NULL:非 NULL;即通過接口更新數據時數據為NULL值時將不更新進數據庫。

解決方案

1. 設置全局的field-strategy

mybatis-plus:
  mapper-locations: classpath:mapper/*Mapper.xml
  global-config:
    # 數據庫相關配置
    db-config:
      #字段策略 IGNORED:"忽略判斷",NOT_NULL:"非 NULL 判斷"),NOT_EMPTY:"非空判斷"
      field-strategy: not_null

2.對所需字段設置單獨的field-strategy(較為麻煩,不推薦)

@TableField(strategy = FieldStrategy.NOT_NULL)
private String cabinetNumber;

3.使用UpdateWrapper方式更新

 
在mybatis-plus中,除了updateById方法,還提供了一個update方法,直接使用update方法也可以將字段設置為null,代碼如下:
LambdaUpdateWrapper<City> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(City::getId,city.getId());
updateWrapper.set(City::getProvince,null);
cityMapper.update(city,updateWrapper);
這種方式不影響其他方法,不需要修改全局配置,也不需要在字段上單獨加注解,所以推薦使用該方式。
 

 


免責聲明!

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



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