美文网首页
Mybatis-Plus 全局Update更新策略,和inser

Mybatis-Plus 全局Update更新策略,和inser

作者: 程序员三时 | 来源:发表于2021-09-27 15:18 被阅读0次

前言

最近在使用mybatis-plus做项目的时候,发现使用updatById方法的时候,更新某个字段时候出现了问题,一般业务操作都是更新不为空的字段,结果发现更新了所有字段,这是由于mybatis-plus全局的更新策略导致的,我们可以通过相应全局配置来解决

image.png

看官方文档可知,数据库全局配置策略有三种,分别是查询策略,更新策略,和添加策略

点击这里进入官方文档

全局数据库策略配置

  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

image.png

添加策略

同理我们在进行inser或者save,方法时候,在没有指定更新策略时候使用默认策略,为NOT_NULL

也就是说当对象字段是NULL的时候不会进行ins添加值,如果我们字段是空字符串就会进行添加值操作,

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

相关文章

  • Mybatis-Plus 全局Update更新策略,和inser

    前言 最近在使用mybatis-plus做项目的时候,发现使用updatById方法的时候,更新某个字段时候出现了...

  • npm相关命令

    npm更新版本 npm update -g-g 全局安装 更新某个包 更新全局包 npm updata xx...

  • MySQL

    DML(data manipulation language)数据操纵语言:SELECT、UPDATE、INSER...

  • Mybatis-Puls主键策略

    (1)ID_WORKER MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID(使用雪花算...

  • mybatis-plus 常用api

    Mybatis-Plus 只查询某些字段 select Update

  • MySQL(十二)DML数据的增删改

    一、DML语言 数据操作语言: 插入:insert 修改:update 删除:delete 二、插入语句inser...

  • 09.更新全局包

    使用npm update -g 命令可以更新全局包,就像这样: 使用npm outdated -g --dept...

  • git命令

    更新远程分支git remote update origin -p 合并请求 命令行指令(初始化) Git 全局设...

  • MongoDB学习(二)

    MongoDB 更新文档 MongoDB 使用update()和save()方法来更新集合中的文档。 update...

  • vue 自定义指令

    此处使用原官网的栗子 在自定义组件中,而并非全局注册的自定义指令 组件更新时触发update和componentU...

网友评论

      本文标题:Mybatis-Plus 全局Update更新策略,和inser

      本文链接:https://www.haomeiwen.com/subject/pdahnltx.html