zoukankan      html  css  js  c++  java
  • 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添加值,如果我们字段是空字符串就会进行添加值操作,

    我们也可以指定其他策略进行添加操作

  • 相关阅读:
    Spring
    sikuli常用方法学习
    运行测试Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path错误解决
    sikuli+java实例
    sikuli运行出现问题:Win32Util.dll: Can't load 32-bit .dll on a AMD 64 bit platform
    官网下载jdk
    java:jdk环境变量配置+tomcat环境变量配置
    Redis能干啥?细看11种Web应用场景
    计数场景的优化
    国内外三个领域巨头告诉你Redis怎么用
  • 原文地址:https://www.cnblogs.com/kenx/p/15343123.html
Copyright © 2011-2022 走看看