問題背景:
最近測試同學給我提了個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);
這種方式不影響其他方法,不需要修改全局配置,也不需要在字段上單獨加注解,所以推薦使用該方式。