1. 程式人生 > 其它 >mybatis-plus如何自動填充欄位建立時間和修改時間

mybatis-plus如何自動填充欄位建立時間和修改時間

技術標籤:面試程式設計師JAVA資料庫javamysqlmybatis後端

前言

根據阿里巴巴開發手冊,表必備三個欄位:id,create_time, update_time,針對建立時間和修改時間我們有兩種方式可以去生成——資料庫層面和程式碼層面

自動填充

資料庫層面
資料庫層面,就是在設計表的時候,針對某一個欄位,可以設定一些更新策略。比如可以設定,當該記錄新增的時候,自動設定建立時間為當前時間。當該條記錄修改的時候,自動設定更新時間為當前時間。但是,由於資料庫的設計非常重要,開發過程中不能隨意修改資料庫結構,故此種方法不作考慮

程式碼層面

程式碼層面,就是我們使用程式碼去填充建立時間和修改時間,下面我就主要說一下這個功能在Mybatis-plus中的使用

1.建立一張表,表中含有欄位create_time和update_time,欄位的型別為:datetime

2.在springboot的pom檔案中,引入mybatis-plus的依賴

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

3.在一個專案中,我們會有很多的實體類,在實體類中配置屬性建立時間和更新時間,屬性上加入@TableField註解

@ApiModelProperty(value = "建立時間")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
   
@ApiModelProperty(value = "更新時間")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

4.註解@TableField中fill詳細介紹

(1)fill(欄位填充策略),為列舉型別,不是必須指定,預設為FieldFill.DEFAULT

(2)FieldFill

DEFAULT:預設不處理
INSERT:插入時填充欄位
UPDATE:更新時填充欄位
INSERT_UPDATE:插入和更新時填充欄位
5.編寫處理器Handler來進行自動填充,把下面的程式碼直接寫在自己的handler包內即可

package com.water76016.ourtask.config.security.handler;
   
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
   
/**
 * @program: our-task
 * @description: 對資料庫每條記錄的建立時間和更新時間自動進行填充
 * @author: water76016
 * @create: 2020-11-24 10:53
 **/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 插入時的填充策略
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
   
    /**
     * 更新時的填充策略
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}