MybatisPlus創(chuàng)建時間不想用默認(rèn)值的問題
MybatisPlus創(chuàng)建時間不想用默認(rèn)值
我們知道,MybatisPlus可以給一些字段設(shè)置默認(rèn)值,比如創(chuàng)建時間,更新時間,分為插入時設(shè)置,和更新時設(shè)置。
常見的例子
/** * 創(chuàng)建時間 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") @TableField(value = "create_time", fill = FieldFill.INSERT) private Timestamp createTime; /** * 修改時間 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private Timestamp updateTime;
其中
@TableField(value = "create_time", fill = FieldFill.INSERT):
這是一個MyBatis-Plus的注解,用于配置數(shù)據(jù)庫字段映射。
value = "create_time"表示這個變量映射到數(shù)據(jù)庫表中的create_time字段。fill = FieldFill.INSERT表示在插入(INSERT)記錄時,這個字段會被自動填充。
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE):
類似于上面的createTime的注解,但fill = FieldFill.INSERT_UPDATE 表示在插入(INSERT)或更新(UPDATE)記錄時,這個字段會被自動填充。
對應(yīng)的,我們需要設(shè)置 MpMetaObjectHandler。
@Component
public class MpMetaObjectHandler implements MetaObjectHandler {
/**
* 插入時的填充策略
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Timestamp(new Date().getTime()), metaObject);
}
/**
* 更新時的填充策略
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Timestamp(new Date().getTime()), metaObject);
}
}MetaObject是MyBatis-Plus中的一個類,它提供了對實體對象字段的訪問和操作。
setFieldValByName方法允許我們根據(jù)字段名動態(tài)地設(shè)置實體對象的字段值。
這樣我們在調(diào)用mapper的insert和update方法時,就會自動填充兩個時間的值,非常方便。
BUT:
有些時候,我希望自己設(shè)置一個創(chuàng)建時間進去,比如我在導(dǎo)入數(shù)據(jù)的時候,插入這張表,人家excel里面就有創(chuàng)建時間,那我當(dāng)然不希望用當(dāng)前時間啦!
結(jié)果,讓人崩潰的是,哪怕你設(shè)置了 createTime ,最終在 insert 的時候,還是會走到 insertFill 的邏輯,保存了當(dāng)前時間。
這實在是令人崩潰,小編試了好多次,終于找到了辦法。我們只需要修改一下 handler。
if(metaObject.hasGetter("createTime") && metaObject.getValue("createTime") == null){
this.setFieldValByName("createTime", new Timestamp(new Date().getTime()), metaObject);
}這段代碼是對insertFill方法的一個增強,它添加了一個條件判斷來確保只有在createTime字段存在且其值為null時,才會為createTime字段設(shè)置當(dāng)前時間戳的值。
這樣一來,創(chuàng)建時間就可以靈活配置了,更新時間也可以這樣改,但是一般來說用不著,更新時間用當(dāng)前時間是沒問題的,很少有需要手動調(diào)整更新時間的情況。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)與算法之雙向鏈表、環(huán)形鏈表及約瑟夫問題深入理解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之雙向鏈表、環(huán)形鏈表及約瑟夫問題深入理解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
java.lang.IllegalStateException:方法有太多主體參數(shù)問題
這篇文章主要介紹了java.lang.IllegalStateException:方法有太多主體參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java List的sort()方法改寫compare()實現(xiàn)升序,降序,倒序的案例
這篇文章主要介紹了Java List的sort()方法改寫compare()實現(xiàn)升序,降序,倒序的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
java大話之創(chuàng)建型設(shè)計模式教程示例
這篇文章主要為大家介紹了java大話之創(chuàng)建型設(shè)計模式教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
spring?Cloud微服務(wù)阿里開源TTL身份信息的線程間復(fù)用
這篇文章主要為大家介紹了spring?Cloud微服務(wù)中使用阿里開源TTL身份信息的線程間復(fù)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Java8內(nèi)存模型PermGen Metaspace實例解析
這篇文章主要介紹了Java8內(nèi)存模型PermGen Metaspace實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03

