前言
最近在使用mybatis-plus做項目的時候,發現使用updatById方法的時候,更新某個字段時候出現了問題,一般業務操作都是更新不為空的字段,結果發現更新了所有字段,這是由於mybatis-plus全局的更新策略導致的,我們可以通過相應全局配置來解決

看官方文檔可知,數據庫全局配置策略有三種,分別是查詢策略,更新策略,和添加策略
點擊這里進入官方文檔
全局數據庫策略配置
- 配置
#全局策略
mybatis-plus.global-config.db-config.update-strategy=not_empty
mybatis-plus.global-config.db-config.insert-strategy=not_empty
mybatis-plus.global-config.db-config.select-strategy=not_empty
可選的配置值,看源碼如下
package com.baomidou.mybatisplus.annotation;
public enum FieldStrategy {
IGNORED,
NOT_NULL,
NOT_EMPTY,
DEFAULT,
NEVER;
private FieldStrategy() {
}
}
- IGNORED 忽略判斷,所有字段都進行更新和插入
- NOT_NULL只更新和插入非NULL值
- NOT_EMPTY 只更新和插入非NULL值且非空字符串
- NEVER 永遠不進行更新和插入
- DEFAULT 默認NOT_NULL
默認取值,看源碼可知
public static class DbConfig {
private IdType idType;
private String tablePrefix;
private String schema;
private String columnFormat;
private String propertyFormat;
private boolean tableUnderline;
private boolean capitalMode;
private IKeyGenerator keyGenerator;
private String logicDeleteField;
private String logicDeleteValue;
private String logicNotDeleteValue;
private FieldStrategy insertStrategy;
private FieldStrategy updateStrategy;
private FieldStrategy selectStrategy;
public DbConfig() {
this.idType = IdType.ASSIGN_ID;
this.tableUnderline = true;
this.capitalMode = false;
this.logicDeleteValue = "1";
this.logicNotDeleteValue = "0";
this.insertStrategy = FieldStrategy.NOT_NULL;
this.updateStrategy = FieldStrategy.NOT_NULL;
this.selectStrategy = FieldStrategy.NOT_NULL;
}
默認取值配置都是NOT_NULL
更新策略配置
也就是我們在使用updateById()方法時候,在沒有指定更新策略時候使用默認策略,為NOT_NULL,
也就是說當對象字段是NULL的時候不會進行set更新,如果我們字段是空字符串就會進行set更新操作,
所以我們可以更改我們全局配置不為空not_empty時候才更新
mybatis-plus.global-config.db-config.update-strategy=not_empty
也可以在需要的字段中單獨指定字段更新策略
/**
* 用戶類型
*/
@TableField(value = "ADMIN_TYPE_ID",updateStrategy = FieldStrategy.NOT_EMPTY)
private String userType;
或者可以使用UpdateWrapper方式替換updateById

添加策略
同理我們在進行inser或者save,方法時候,在沒有指定更新策略時候使用默認策略,為NOT_NULL,
也就是說當對象字段是NULL的時候不會進行ins添加值,如果我們字段是空字符串就會進行添加值操作,
我們也可以指定其他策略進行添加操作
