Mybatis-Plus 全局Update更新策略,和insert插入查詢策略


前言

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


看官方文檔可知,數據庫全局配置策略有三種,分別是查詢策略,更新策略,和添加策略

點擊這里進入官方文檔

全局數據庫策略配置

  1. 配置
#全局策略
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() {
    }
}
  1. IGNORED 忽略判斷,所有字段都進行更新和插入
  2. NOT_NULL只更新和插入非NULL值
  3. NOT_EMPTY 只更新和插入非NULL值且非空字符串
  4. NEVER 永遠不進行更新和插入
  5. 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添加值,如果我們字段是空字符串就會進行添加值操作,

我們也可以指定其他策略進行添加操作


免責聲明!

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



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