分享一个小技巧——mysql统一处理创建时间和更新时间

createh53个月前 (02-01)技术教程18

背景

mysql数据库表设计的时候,通常都会有这两个字段————创建时间和更新时间,创建时间即mysql记录第一次插入的时间,更新时间即mysql记录发生更新时的时间。通常的做法都是先创建对象,然后分别对创建时间和更新时间进行赋值,然后再去做持久化操作。那有没有统一处理的方式呢?有,还非常简单。快跟小编一起来看看吧!

优缺点

通常使用一个东西的时候,我们都要知道它优缺点,分享干货之前,我们先来是说下统一处理创建时间和更新时间的优缺点吧

优点

  1. 统一处理,在一定程度上减少了代码的冗长,代码看起来干净整洁
  2. 统一处理,因为不用去每次操作对象,对创建时间和更新时间字段进行赋值操作,在一定程度上减少了逻辑,使开发人员可以更专注于业务开发
  3. 使用简单,统一配置后,支持使用注解

缺点

所有的数据库表的创建时间和更新时间字段都要使用统一的字段名称。

原理

我们使用的是mybatisPlus为我们提供的的一个扩展接口MetaObjectHandler,可以利用这个接口在我们插入或者更新数据的时候,给创建时间和更新时间字段设置为当前的系统时间。需要重写insertFill和updateFill两个方法即可。

搭建

引入相关pom依赖



    com.baomidou
    mybatis-plus-boot-starter
    3.4.1



    mysql
    mysql-connector-java
    runtime



    com.alibaba
    druid-spring-boot-starter
    1.1.22

定义时间填充器handler

/**
 * @desc:时间填充器
 * @author:liyajie
 * @createTime:2021/12/25 18:23
 * @version:1.0
 */
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill...");
        this.setFieldValByName("createDate", new Date(), metaObject);
        this.setFieldValByName("updateDate", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill...");
        this.setFieldValByName("updateDate", new Date(), metaObject);
    }
}

编写测试案例

分别编写controller,service,dao就可以了,大家都会,这里我就省略不写 。。。。

测试

新增一个王五,我们传入的报文只有id和name,我们的时间填充器会自动把创建时间和更新时间给填上

更新下王五的信息,我们的时间填充器会自动把更新时间给更新

注意点

如果持久化对象的创建时间和更新时间传了值,最终会以传的值为准

结束

如需获取源码,请关注后,私信小编,非常感谢

相关文章

java项目过程中常用的日期计算工具

在项目开发过程中,日期计算往往是一个非常常见且关键的需求,尤其是在涉及报表生成和数据分析的场景中。许多业务需求需要对日期进行各种复杂的逻辑处理,例如计算某个时间段内的数据、动态生成时间范围、处理跨月或...

一文秒懂:多级时间轮,最顶尖的Java调度算法

缓存之王 Caffeine 中,涉及到100w级、1000W级、甚至亿级元素的过期问题,如何进行高性能的定时调度,是一个难题。海量定时任务管理的问题下面的问题,来自互联网:一个大型内容审核平时,在运营...

时间戳用法详解,时间与时间戳怎么转换

在程序开发者用到的必不可少的功能就是时间戳与时间的转换了,经常数据库存的是时间戳,但是给用户需要显示具体时间,今天这篇文章就来介绍下怎么使用python,java,JavaScript,php几种语言...

时间管理大师:Java DateTimeFormatter.ofPattern 的幽默指南

前言在这个快节奏的世界里,时间就像一张消费券,谁都想把它花得更值!想象一下,能够像一个时间管理大师一样,随心所欲地掌控每一秒。Java 的 DateTimeFormatter.ofPattern 就是...

新华全媒+丨岗位变多变少?工作好找难找?——来自制造业用工大省的一线观察

新华社杭州2月18日电 题:岗位变多变少?工作好找难找?——来自制造业用工大省的一线观察新华社记者魏一骏、赵瑞希、王凯元宵节过后,越来越多企业复工达产,开启了虎年新征程。记者近日在浙江、广东、山东等制...

JAVA与PHP语言时间戳的转换问题(java时间转时间戳)

简单描述一下时间戳定义:百度百科:时间戳(timestamp),通常是一个字符序列,唯一的标识某一刻的时间。在编程语言中,时间戳表示自 1970 年 1 月 1 日(08:00:00 GMT) 年至当...