分享一個小技巧——mysql統(tǒng)一處理創(chuàng)建時間和更新時間

背景

mysql數(shù)據(jù)庫表設計的時候,通常都會有這兩個字段————創(chuàng)建時間和更新時間,創(chuàng)建時間即mysql記錄第一次插入的時間,更新時間即mysql記錄發(fā)生更新時的時間。通常的做法都是先創(chuàng)建對象,然后分別對創(chuàng)建時間和更新時間進行賦值,然后再去做持久化操作。那有沒有統(tǒng)一處理的方式呢?有,還非常簡單??旄【幰黄饋砜纯窗桑?/p>

優(yōu)缺點

通常使用一個東西的時候,我們都要知道它優(yōu)缺點,分享干貨之前,我們先來是說下統(tǒng)一處理創(chuàng)建時間和更新時間的優(yōu)缺點吧

優(yōu)點

  1. 統(tǒng)一處理,在一定程度上減少了代碼的冗長,代碼看起來干凈整潔
  2. 統(tǒng)一處理,因為不用去每次操作對象,對創(chuàng)建時間和更新時間字段進行賦值操作,在一定程度上減少了邏輯,使開發(fā)人員可以更專注于業(yè)務開發(fā)
  3. 使用簡單,統(tǒng)一配置后,支持使用注解

缺點

所有的數(shù)據(jù)庫表的創(chuàng)建時間和更新時間字段都要使用統(tǒng)一的字段名稱。

原理

我們使用的是mybatisPlus為我們提供的的一個擴展接口MetaObjectHandler,可以利用這個接口在我們插入或者更新數(shù)據(jù)的時候,給創(chuàng)建時間和更新時間字段設置為當前的系統(tǒng)時間。需要重寫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 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,我們的時間填充器會自動把創(chuàng)建時間和更新時間給填上

image.png
image.png

更新下王五的信息,我們的時間填充器會自動把更新時間給更新

image.png
image.png

注意點

如果持久化對象的創(chuàng)建時間和更新時間傳了值,最終會以傳的值為準

結束

需要源碼的可以關注公眾號【溫故知新之java】,更多干活與你分享。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容