前言
最近在使用mybatis-plus
做項目的時候瀑踢,發(fā)現(xiàn)使用updatById
方法的時候扳还,更新某個字段時候出現(xiàn)了問題,一般業(yè)務(wù)操作都是更新不為空的字段橱夭,結(jié)果發(fā)現(xiàn)更新了所有字段氨距,這是由于mybatis-plus全局的更新策略導(dǎo)致的,我們可以通過相應(yīng)全局配置來解決
image.png
看官方文檔可知徘钥,數(shù)據(jù)庫全局配置策略有三種衔蹲,分別是查詢策略,更新策略,和添加策略
點擊這里進入官方文檔
全局?jǐn)?shù)據(jù)庫策略配置
- 配置
#全局策略
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
练湿,
也就是說當(dāng)對象字段是NULL
的時候不會進行set更新蜀细,如果我們字段是空字符串就會進行set更新操作爽彤,
所以我們可以更改我們?nèi)峙渲貌粸榭?code>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
image.png
添加策略
同理我們在進行inser
或者save
溢十,方法時候懊缺,在沒有指定更新策略時候使用默認策略巨税,為NOT_NULL
蟋定,
也就是說當(dāng)對象字段是NULL
的時候不會進行ins添加值,如果我們字段是空字符串就會進行添加值操作草添,
我們也可以指定其他策略進行添加操作