MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式
為什么要自動(dòng)去維護(hù)這兩個(gè)時(shí)間
在實(shí)際開(kāi)發(fā)中基本上每張表中都有這兩個(gè)類(lèi)型的字段,創(chuàng)建時(shí)間和修改時(shí)間。是為了保證數(shù)據(jù)的可追溯性,當(dāng)然肯定還是有操作日志記錄表用來(lái)做追溯記錄。
開(kāi)發(fā)中每一次的創(chuàng)建更新都需要手動(dòng)去設(shè)置這一次操作的時(shí)間,會(huì)有很多的代碼冗余。
創(chuàng)建時(shí)間還好,只是在創(chuàng)建的時(shí)候去維護(hù)但是更新時(shí)間并不能通過(guò)DB去維護(hù),MybatisPlus為我們提供了MetaObjectHandler 接口
面我們使用整個(gè)接口進(jìn)行操作
先準(zhǔn)備一下兩個(gè)實(shí)體類(lèi)
這個(gè)我們繼承了一下 公共字段 PublicField
@Data @TableName("sys_log") public class SysLog extends PublicField implements Serializable { private static final long serialVersionUID = 1L; /** * 操作IP */ private String ip; /** * 操作類(lèi)型 1 操作記錄2異常記錄 */ private Integer runType; /** * 日志類(lèi)型 1是登錄日志2是操作日志 */ private Integer logType; /** * 操作位置 1是租戶(hù) 2是boss */ private Integer whereType; /** * 操作人 */ private String userName; /** * 操作描述 */ private String description; /** * 請(qǐng)求方法 */ private String actionMethod; private String actionUrl; /** * 請(qǐng)求參數(shù) */ private String params; /** * 瀏覽器 */ private String browser; /** * 類(lèi)路徑 */ private String classPath; /** * 請(qǐng)求方法 */ private String requestMethod; /** * 開(kāi)始時(shí)間 */ private String startTime; /** * 完成時(shí)間 */ private String finishTime; /** * 消耗時(shí)間 */ private Long consumingTime; /** * 異常詳情信息 */ private String exDesc; /** * 異常描述 */ private String exDetail; /** * 租戶(hù)標(biāo)識(shí) */ private String tenantDatakey; /** * 操作地點(diǎn) */ private String location; /** * 操作系統(tǒng) */ private String os; /** * 請(qǐng)求狀態(tài) * */ public Integer status; /** * 返回?cái)?shù)據(jù) */ private String returnData; }
公共字段類(lèi):
@Data public class PublicField { @TableId(value = "id" ,type = IdType.AUTO) @ApiModelProperty(value = "ID") private Integer id; /** * 創(chuàng)建時(shí)間 */ @ApiModelProperty(value = "創(chuàng)建時(shí)間") @TableField(value = "create_date",fill = FieldFill.INSERT) private Date createDate; /** * 修改日期 */ @ApiModelProperty(value = "修改時(shí)間") @TableField(value ="update_date" ,fill= FieldFill.INSERT_UPDATE) private Date updateDate; }
下面我們配置一下
@Component @Slf4j public class MybatisPlusBaseHandler implements MetaObjectHandler { //重寫(xiě)一下insertFill方法 在插入時(shí)進(jìn)行時(shí)間的自動(dòng)維護(hù) @Override public void insertFill(MetaObject metaObject) { log.info("新增更新時(shí)間-------------------------"); this.strictInsertFill(metaObject,"createDate", Date.class,new Date()); this.strictUpdateFill(metaObject,"updateDate",Date.class,new Date()); } // 修改操作是進(jìn)行時(shí)間的維護(hù) @Override public void updateFill(MetaObject metaObject) { log.info("修改更新時(shí)間-------------------------"); this.strictUpdateFill(metaObject,"updateDate",Date.class,new Date()); } }
測(cè)試插入一條記錄
輸出結(jié)果:
@Test public void inserint(){ SysLog sysLog = new SysLog(); sysLog.setId(2555); sysLog.setDescription("測(cè)試修改時(shí)間能不能自動(dòng)更新"); iLogServicel.updateById(sysLog); }
輸出結(jié)果:
在DB中也可以看到修改時(shí)間已經(jīng)更新(因?yàn)閯?chuàng)建的時(shí)候修改時(shí)間和創(chuàng)建時(shí)間是樣的現(xiàn)在 修改時(shí)間已經(jīng)更新)
最后我貼一下我的maven
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過(guò)Java創(chuàng)建Socket連接到服務(wù)器方式
這篇文章主要介紹了通過(guò)Java創(chuàng)建Socket連接到服務(wù)器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11metershpere實(shí)現(xiàn)調(diào)用自定義jar包中的方法
在MeterSphere接口測(cè)試中,面對(duì)多層循環(huán)邏輯和邏輯判斷等復(fù)雜情況,直接編寫(xiě)測(cè)試用例往往顯得混亂不便,本文介紹了一個(gè)簡(jiǎn)化這一過(guò)程的方法:首先使用IDEA創(chuàng)建Maven工程,編寫(xiě)所需邏輯并生成jar包;然后在MeterSphere中上傳此jar包2024-10-10Feign 集成 Hystrix實(shí)現(xiàn)不同的調(diào)用接口不同的設(shè)置方式
這篇文章主要介紹了Feign 集成 Hystrix實(shí)現(xiàn)不同的調(diào)用接口不同的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java中的while循環(huán)語(yǔ)句詳細(xì)講解
這篇文章主要給大家介紹了關(guān)于Java中while循環(huán)語(yǔ)句的相關(guān)資料,while循環(huán)是一種在編程中常見(jiàn)的控制流語(yǔ)句,它允許代碼在特定條件下(通常是一個(gè)布爾表達(dá)式)重復(fù)執(zhí)行一段代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解
這篇文章主要介紹了SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Python學(xué)習(xí)之書(shū)寫(xiě)格式及變量命名
這篇文章我們給大家總結(jié)了關(guān)于Python書(shū)寫(xiě)格式及變量命名,小編覺(jué)得這篇文章寫(xiě)的還不錯(cuò),有興趣的朋友跟著參考學(xué)習(xí)下,希望能夠給你帶來(lái)幫助2021-10-1018個(gè)Java8日期處理的實(shí)踐(太有用了)
這篇文章主要介紹了18個(gè)Java8日期處理的實(shí)踐(太有用了),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Java線(xiàn)程安全的計(jì)數(shù)器簡(jiǎn)單實(shí)現(xiàn)代碼示例
這篇文章主要介紹了Java線(xiàn)程安全的計(jì)數(shù)器簡(jiǎn)單實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10