MybatisPlus插件自动维护更新和创建时间方式

 更新时间:2025年04月06日 11:31:07   作者:青衣画白扇  
这篇文章主要介绍了MybatisPlus插件自动维护更新和创建时间方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

为什么要自动去维护这两个时间

在实际开发中基本上每张表中都有这两个类型的字段,创建时间和修改时间。是为了保证数据的可追溯性,当然肯定还是有操作日志记录表用来做追溯记录。

开发中每一次的创建更新都需要手动去设置这一次操作的时间,会有很多的代码冗余。

创建时间还好,只是在创建的时候去维护但是更新时间并不能通过DB去维护,MybatisPlus为我们提供了MetaObjectHandler 接口

面我们使用整个接口进行操作

先准备一下两个实体类

这个我们继承了一下 公共字段 PublicField

@Data
@TableName("sys_log")
public class SysLog extends PublicField implements Serializable {

    private static final long serialVersionUID = 1L;


    /**
     * 操作IP
     */
    private String ip;

    /**
     * 操作类型 1 操作记录2异常记录
     */
    private Integer runType;
    /**
     * 日志类型 1是登录日志2是操作日志
     */
    private Integer logType;
    /**
     * 操作位置 1是租户 2是boss
     */
    private Integer whereType;
    /**
     * 操作人
     */
    private String userName;

    /**
     * 操作描述
     */
    private String description;

    /**
     * 请求方法
     */
    private String actionMethod;

    private String actionUrl;

    /**
     * 请求参数
     */
    private String params;

    /**
     * 浏览器
     */
    private String browser;

    /**
     * 类路径
     */
    private String classPath;

    /**
     * 请求方法
     */
    private String requestMethod;

    /**
     * 开始时间
     */
    private String startTime;

    /**
     * 完成时间
     */
    private String finishTime;

    /**
     * 消耗时间
     */
    private Long consumingTime;

    /**
     * 异常详情信息
     */
    private String exDesc;

    /**
     * 异常描述
     */
    private String exDetail;

    /**
     * 租户标识
     */
    private String tenantDatakey;

    /**
     * 操作地点
     */
    private String location;

    /**
     * 操作系统
     */
    private String os;

    /**
     * 请求状态
     *
     */
    public Integer status;
    /**
     * 返回数据
     */
    private String returnData;

}

公共字段类:

@Data
public class PublicField {

    @TableId(value = "id" ,type = IdType.AUTO)
    @ApiModelProperty(value = "ID")
    private Integer id;
    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @TableField(value = "create_date",fill = FieldFill.INSERT)
    private Date createDate;

    /**
     * 修改日期
     */
    @ApiModelProperty(value = "修改时间")
    @TableField(value ="update_date" ,fill= FieldFill.INSERT_UPDATE)
    private Date updateDate;
}

下面我们配置一下

@Component
@Slf4j
public class MybatisPlusBaseHandler implements MetaObjectHandler {
    //重写一下insertFill方法 在插入时进行时间的自动维护
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("新增更新时间-------------------------");
        this.strictInsertFill(metaObject,"createDate", Date.class,new Date());
        this.strictUpdateFill(metaObject,"updateDate",Date.class,new Date());
    }
    // 修改操作是进行时间的维护
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("修改更新时间-------------------------");
        this.strictUpdateFill(metaObject,"updateDate",Date.class,new Date());
    }
}

测试插入一条记录

输出结果:

@Test
public void inserint(){
    SysLog sysLog = new SysLog();
    sysLog.setId(2555);
    sysLog.setDescription("测试修改时间能不能自动更新");
    iLogServicel.updateById(sysLog);
}

输出结果:

在DB中也可以看到修改时间已经更新(因为创建的时候修改时间和创建时间是样的现在 修改时间已经更新)

最后我贴一下我的maven

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>

总结

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

相关文章

  • Java擦除和转换实例分析

    Java擦除和转换实例分析

    这篇文章主要介绍了Java擦除和转换,结合实例形式分析了java擦除和转换概念、功能及相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 通过Java创建Socket连接到服务器方式

    通过Java创建Socket连接到服务器方式

    这篇文章主要介绍了通过Java创建Socket连接到服务器方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • metershpere实现调用自定义jar包中的方法

    metershpere实现调用自定义jar包中的方法

    在MeterSphere接口测试中,面对多层循环逻辑和逻辑判断等复杂情况,直接编写测试用例往往显得混乱不便,本文介绍了一个简化这一过程的方法:首先使用IDEA创建Maven工程,编写所需逻辑并生成jar包;然后在MeterSphere中上传此jar包
    2024-10-10
  • Feign 集成 Hystrix实现不同的调用接口不同的设置方式

    Feign 集成 Hystrix实现不同的调用接口不同的设置方式

    这篇文章主要介绍了Feign 集成 Hystrix实现不同的调用接口不同的设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java中的while循环语句详细讲解

    Java中的while循环语句详细讲解

    这篇文章主要给大家介绍了关于Java中while循环语句的相关资料,while循环是一种在编程中常见的控制流语句,它允许代码在特定条件下(通常是一个布尔表达式)重复执行一段代码,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • SpringBoot后端进行数据校验JSR303的使用详解

    SpringBoot后端进行数据校验JSR303的使用详解

    这篇文章主要介绍了SpringBoot后端进行数据校验JSR303的使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Python学习之书写格式及变量命名

    Python学习之书写格式及变量命名

    这篇文章我们给大家总结了关于Python书写格式及变量命名,小编觉得这篇文章写的还不错,有兴趣的朋友跟着参考学习下,希望能够给你带来帮助
    2021-10-10
  • Java中的迭代器和foreach原理

    Java中的迭代器和foreach原理

    这篇文章主要介绍了Java中的迭代器和foreach原理,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-09-09
  • 18个Java8日期处理的实践(太有用了)

    18个Java8日期处理的实践(太有用了)

    这篇文章主要介绍了18个Java8日期处理的实践(太有用了),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Java线程安全的计数器简单实现代码示例

    Java线程安全的计数器简单实现代码示例

    这篇文章主要介绍了Java线程安全的计数器简单实现代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论