Mybatis-plus配置之日期时间自动填充实践

 更新时间:2025年08月11日 08:49:18   作者:java_学习爱好者  
本文介绍如何使用MyBatis-Plus的MetaObjectHandler接口实现新增和更新时间的自动填充,通过继承抽象类、添加注解及处理版本兼容性,简化开发流程并减少手动操作

一、前言

在业务开发时——每次数据更新或新增时都需要特意得去修改时间,总是进行这种繁琐的操作,给很多后端开发人员造成了很大得困扰。

这一期我们就帮大家解决掉这个问题,MyBatis-Plus 提供了非常便捷的方式来实现这一功能,通过使用其内置的 MetaObjectHandler 接口,实现新增日期和更改日期的快速填充,以此解放广大码农朋友的双手。

二、导入依赖

 <!-- 内置mybatis-plus插件依赖 -->
    <dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>3.4.2</version>
     </dependency>
     <!-- MySql -->
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.11</version>
       </dependency>

三、构造抽象类

后续所有的实体类,都可以继承这个基础的实体类,以提高代码的复用性

在需要自动创建更新的属性上,加上@TableField注解

public abstract class BasePojo {
    //文件创建,自动填充。需要实现MetaObjectHandle接口,进行处理
    @TableField(fill = FieldFill.INSERT)
    private Date created;
    //文件更新,自动填充
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updated;
}

四、实现MetaObjectHandle接口

package com.tanhua.sso.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        // 使用严格模式插入填充,如果字段为null则进行填充
        this.strictInsertFill(metaObject, "created", Date.class, new Date()); // 创建时间
        this.strictInsertFill(metaObject, "updated", Date.class, new Date()); // 更新时间
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 使用严格模式更新填充,总是设置更新时间
        this.strictUpdateFill(metaObject, "updated", Date.class, new Date());
    }
}

五、版本兼容性问题

若业务中mybatis-plus版本较低,可能不含strict方法,可以采用以下写法

package com.tanhua.sso.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        //字段为空,自动填充字段
        Object created = getFieldValByName("created", metaObject);
        if(null==created){
            setFieldValByName("created",new Date(),metaObject);
        }
        Object updated = getFieldValByName("updated", metaObject);
        if(null==updated){
            setFieldValByName("updated",new Date(),metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //更新数据时,更新字段
        setFieldValByName("updated",new Date(),metaObject);
    }
}

六、总结

至此,自动填充功能,圆满实现。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java利用策略模式优化过多if else代码

    Java利用策略模式优化过多if else代码

    这篇文章主要介绍了Java利用策略模式优化过多if else代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java Idea TranslationPlugin翻译插件使用解析

    Java Idea TranslationPlugin翻译插件使用解析

    这篇文章主要介绍了Java Idea TranslationPlugin翻译插件使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法

    Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法

    这篇文章主要介绍了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法,结合实例形式详细分析了post数据发送及获取请求数据的原理与相关操作注意事项,需要的朋友可以参考下
    2017-11-11
  • Java多线程实现Callable接口

    Java多线程实现Callable接口

    本文给大家分享的是使用Java多线程来实现callable接口的方法,以及使用方法,另外还有一个网友的实例,希望能够对大家掌握Java多线程有所帮助。
    2016-06-06
  • 详解Java的Proxy动态代理机制

    详解Java的Proxy动态代理机制

    Java有两种代理方式,一种是静态代理,另一种是动态代理。对于静态代理,其实就是通过依赖注入,对对象进行封装,不让外部知道实现的细节。很多 API 就是通过这种形式来封装的
    2021-06-06
  • Java及Android中常用链式调用写法简单示例

    Java及Android中常用链式调用写法简单示例

    这篇文章主要介绍了Java及Android中常用链式调用写法,结合实例形式分析了java编程中的链式调用概念、简单使用方法及相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • spring mvc实现登录账号单浏览器登录

    spring mvc实现登录账号单浏览器登录

    这篇文章主要为大家详细介绍了spring mvc实现登录账号单浏览器登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • springboot中validator数据校验功能的实现

    springboot中validator数据校验功能的实现

    这篇文章主要介绍了springboot中validator数据校验功能,校验分为普通校验和分组校验,每种校验方式通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Spring Boot如何移除内嵌Tomcat,使用非web方式启动

    Spring Boot如何移除内嵌Tomcat,使用非web方式启动

    这篇文章主要介绍了Spring Boot如何移除内嵌Tomcat,使用非web方式启动,帮助大家更好的理解和学习使用spring boot框架,感兴趣的朋友可以了解下
    2021-02-02
  • MyBatis的各种查询功能结果接收类型的选择(推荐)

    MyBatis的各种查询功能结果接收类型的选择(推荐)

    文章介绍了MyBatis中查询结果的不同接收方式,包括单条数据和多条数据的处理方法,以及MyBatis的默认类型别名,感兴趣的朋友跟随小编一起看看吧
    2024-11-11

最新评论