IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Mybatis-Plus自动填充失效原因和解决方案 -> 正文阅读

[Java知识库]Mybatis-Plus自动填充失效原因和解决方案

前言

今天在公司无聊闲来无事,就想找点事做,想起来之前有个服务有个bug,就是Mybatis-Plus在做增删改的时候创建时间和修改时间这些公共的字段没有自动填充,于是我就开始找bug了。。。

问题

在这里插入图片描述

从图片中大家可以清楚看到一条sql有4个字段的值是null

正是公共字段:

  • creationDate 创建时间
  • createdBy 创建人
  • lastUpdateDate 更新时间
  • lastUpdateBy 更新人

需要注意的是在触发自动填充之前是要在公共字段中配置枚举类的

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime creationDate;
    
    @TableField(fill = FieldFill.INSERT)
    private String createdBy;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime lastUpdateDate;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String lastUpdateBy;

配置这些什么意思想必没有必要解释了吧,直接看代码注释吧

public enum FieldFill {
    /**
     * 默认不处理
     */
    DEFAULT,
    /**
     * 插入时填充字段
     */
    INSERT,
    /**
     * 更新时填充字段
     */
    UPDATE,
    /**
     * 插入和更新时填充字段
     */
    INSERT_UPDATE
}

于是我就在Mybatis-Plus在配置自动填充的配置类中开始Debug

@Component
@Slf4j
public class BaseEntityMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("star fill ..........");
        UserBo user = AuthHolder.currentSysUser();
        String userBy = user.getId();
        this.strictInsertFill(metaObject, "createdAt", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "createdBy", String.class, userBy);
        this.strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updatedBy", String.class, userBy);
        this.strictInsertFill(metaObject, "lastUpdateDate", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "lastUpdateBy", String.class, userBy);
        this.strictInsertFill(metaObject, "creationDate", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        UserBo user = AuthHolder.currentSysUser();
        String userBy = user.getId();
        this.strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updatedBy", String.class, userBy);
        this.strictInsertFill(metaObject, "last_update_date", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "last_update_by", String.class, userBy);
    }
}

上面代码就是这个服务的自动填充配置,insertFill方法是新增出发填充,updateFill是修改自动填充

虽然加了@Component注解、日志、和断点,但是在Debug的时候发现并没有进入这段自动填充的代码,

在这里插入图片描述

大家从上图可以看到Insert语句依旧没有进入方法

解决方法

经过排查发现我的问题是在配置多数据源的地方出现的问题,少了一段红框的代码。

在这里插入图片描述

为什么没有进入自动填充的配置类?

答案:通俗点讲就是这边在配置数据源的时候做了局部的处理,把默认的机制给改了,需要手动指定实现MetaObjectHandler的类。

常见失效原因

我的这个问题还是比较难发现的,一般常见的原因如下几种

原创不易,转载请标注来源!

微信公众号:小航学Java

博客园:https://www.cnblogs.com/mrhang/

CSDN:https://blog.csdn.net/weixin_46040901

掘金:https://juejin.cn/user/4156577737093352

专注Java相关技术:SSM、Spring全家桶、微服务、MySQL、MyCat、集群、分布式、中间件、Linux、网络、多线程,偶尔讲点运维Jenkins、Nexus、Docker、ELK,偶尔分享些技术干货,致力于Java全栈开发!

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-21 21:21:07  更:2022-06-21 21:22:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:52:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码