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

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

  • 相关阅读:
    PHP中有多态么
    【Android】九宫格实现
    采用xshell链路本地虚拟机Linux
    读取资源文件的工具.
    dede织梦背景经常使用标签
    PHP第三个教训 PHP基本数据类型
    Linux经常使用的命令(必看)
    易Android登录Demo
    [2013山东ACM]省赛 The number of steps (可能DP,数学期望)
    web开发性能优化---UI接口章
  • 原文地址:https://www.cnblogs.com/kenx/p/15343123.html
Copyright © 2020-2023  润新知