您的位置 首页 java

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

背景

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

优缺点

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

优点

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

缺点

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

原理

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

搭建

引入相关 pom 依赖

 <!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!--druid连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>
  

定义时间填充器handler

 /**
 * @desc:时间填充器
 * @author:liyajie
 * @createTime:2021/12/25 18:23
 * @version:1.0
 */@Component
@Slf4j
public class MyMetaObjectHandler implements  Meta ObjectHandler {
    @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,我们的时间填充器会自动把创建时间和更新时间给填上

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

注意点

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

结束

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

文章来源:智云一二三科技

文章标题:分享一个小技巧——mysql统一处理创建时间和更新时间

文章地址:https://www.zhihuclub.com/189587.shtml

关于作者: 智云科技

热门文章

评论已关闭

4条评论

  1. The investigators found that patients with grade 3 or more extensive calcifications greater than 1

  2. Vukich says it s important to find out their motivations for wanting the procedure Although there have been many advancements in infertility treatment, the cost can be a concern for those without insurance coverage

  3. Copy number alterations of CCNE1 19q12 and AURKA 20q13 have been reported to occur exclusively in high grade DCIS 47, while the 11q13 amplicon, frequently present in high grade DCIS, contains the known oncogene CCND1 32 Fig

  4. Two major cannabinoid receptor subtypes exist CB1 is predominantly expressed in the brain, and CB2 is primarily found on the cells of the immune system 23, 37 39

网站地图