前言
根據(jù)阿里巴巴開發(fā)手冊(cè),表必備三個(gè)字段:id,create_time, update_time本涕,針對(duì)創(chuàng)建時(shí)間和修改時(shí)間我們有兩種方式可以去生成——數(shù)據(jù)庫層面和代碼層面
自動(dòng)填充
數(shù)據(jù)庫層面
數(shù)據(jù)庫層面,就是在設(shè)計(jì)表的時(shí)候,針對(duì)某一個(gè)字段,可以設(shè)置一些更新策略翅帜。比如可以設(shè)置,當(dāng)該記錄添加的時(shí)候命满,自動(dòng)設(shè)置創(chuàng)建時(shí)間為當(dāng)前時(shí)間涝滴。當(dāng)該條記錄修改的時(shí)候,自動(dòng)設(shè)置更新時(shí)間為當(dāng)前時(shí)間胶台。但是歼疮,由于數(shù)據(jù)庫的設(shè)計(jì)非常重要,開發(fā)過程中不能隨意修改數(shù)據(jù)庫結(jié)構(gòu)诈唬,故此種方法不作考慮
代碼層面
代碼層面韩脏,就是我們使用代碼去填充創(chuàng)建時(shí)間和修改時(shí)間,下面我就主要說一下這個(gè)功能在Mybatis-plus中的使用
1.創(chuàng)建一張表铸磅,表中含有字段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.在一個(gè)項(xiàng)目中阅仔,我們會(huì)有很多的實(shí)體類吹散,在實(shí)體類中配置屬性創(chuàng)建時(shí)間和更新時(shí)間,屬性上加入@TableField注解
@ApiModelProperty(value = "創(chuàng)建時(shí)間")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新時(shí)間")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
4.注解@TableField中fill詳細(xì)介紹
(1)fill(字段填充策略)八酒,為枚舉類型空民,不是必須指定,默認(rèn)為FieldFill.DEFAULT
(2)FieldFill
DEFAULT:默認(rèn)不處理
INSERT:插入時(shí)填充字段
UPDATE:更新時(shí)填充字段
INSERT_UPDATE:插入和更新時(shí)填充字段
5.編寫處理器Handler來進(jìn)行自動(dòng)填充羞迷,把下面的代碼直接寫在自己的handler包內(nèi)即可
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: 對(duì)數(shù)據(jù)庫每條記錄的創(chuàng)建時(shí)間和更新時(shí)間自動(dòng)進(jìn)行填充
* @author: water76016
* @create: 2020-11-24 10:53
**/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入時(shí)的填充策略
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
/**
* 更新時(shí)的填充策略
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}