Mybatis-Plus 全局Update更新策略,和insert插入查詢策略
- 2021 年 9 月 27 日
- 筆記
- mybatis-plus, mybatisPlus
前言
最近在使用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添加值,如果我們欄位是空字元串就會進行添加值操作,
我們也可以指定其他策略進行添加操作