java實(shí)現(xiàn)pgsql自動(dòng)更新創(chuàng)建時(shí)間與更新時(shí)間的兩種方式小結(jié)
一:通過(guò)數(shù)據(jù)庫(kù)自身實(shí)現(xiàn)
在 PostgreSQL 中,可以通過(guò)創(chuàng)建觸發(fā)器來(lái)實(shí)現(xiàn)自動(dòng)填充創(chuàng)建時(shí)間和更新時(shí)間。
1.首先,我們需要在表中添加兩個(gè)字段:update_time
和 create_time
,分別表示創(chuàng)建時(shí)間和更新時(shí)間。
ALTER TABLE idc_order_record ADD COLUMN create_time TIMESTAMP DEFAULT (TO_CHAR((NOW() AT TIME ZONE 'Asia/Shanghai'), 'YYYY-MM-DD HH24:MI:SS')::timestamp), ADD COLUMN update_time TIMESTAMP DEFAULT (TO_CHAR((NOW() AT TIME ZONE 'Asia/Shanghai'), 'YYYY-MM-DD HH24:MI:SS')::timestamp);
2.然后,我們可以創(chuàng)建兩個(gè)觸發(fā)器,一個(gè)用于在插入行時(shí)自動(dòng)填充 created_at
字段,另一個(gè)用于在更新行時(shí)自動(dòng)填充 updated_at
字段。
CREATE OR REPLACE FUNCTION trigger_set_create_time() RETURNS TRIGGER AS $$ BEGIN NEW.create_time = TO_CHAR(NOW() AT TIME ZONE 'Asia/Shanghai', 'YYYY-MM-DD HH24:MI:SS'); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION trigger_set_update_time() RETURNS TRIGGER AS $$ BEGIN NEW.update_time = TO_CHAR(NOW() AT TIME ZONE 'Asia/Shanghai', 'YYYY-MM-DD HH24:MI:SS'); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER set_create_time BEFORE INSERT ON idc_order_record FOR EACH ROW EXECUTE FUNCTION trigger_set_create_time(); CREATE TRIGGER set_update_time BEFORE UPDATE ON idc_order_record FOR EACH ROW EXECUTE FUNCTION trigger_set_update_time();
如果你想重新定義該觸發(fā)器,請(qǐng)先刪除現(xiàn)有的觸發(fā)器,然后再創(chuàng)建新的觸發(fā)器。
DROP TRIGGER IF EXISTS set_create_time ON idc_order_record; DROP TRIGGER IF EXISTS set_update_time ON idc_order_record;
二:通過(guò)mybatisplus的TableField注解添加
1. 在實(shí)體類上的createTime與updateTime上添加注解
@TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime;
2.自定義元數(shù)據(jù)對(duì)象處理器繼承MetaObjectHandler接口
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; /** * 自定義元數(shù)據(jù)對(duì)象處理器 */ @Component @Slf4j public class MyMetaObjecthandler implements MetaObjectHandler { /** * 插入操作,自動(dòng)填充 * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { log.info("公共字段自動(dòng)填充[insert]..."); metaObject.setValue("createTime", LocalDateTime.now()); metaObject.setValue("updateTime",LocalDateTime.now()); } /** * 更新操作,自動(dòng)填充 * @param metaObject */ @Override public void updateFill(MetaObject metaObject) { log.info("公共字段自動(dòng)填充[update]..."); metaObject.setValue("updateTime",LocalDateTime.now()); } }
到此這篇關(guān)于java實(shí)現(xiàn)pgsql自動(dòng)更新創(chuàng)建時(shí)間與更新時(shí)間的兩種方式小結(jié)的文章就介紹到這了,更多相關(guān)java pgsql自動(dòng)更新時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows7下的Java運(yùn)行環(huán)境搭建過(guò)程圖解
這篇文章主要介紹了Windows7下的Java運(yùn)行環(huán)境搭建過(guò)程圖解,需要的朋友可以參考下2014-04-04使用mybatis-plus分頁(yè)出現(xiàn)兩個(gè)Limit的問(wèn)題解決
在使用MyBatis-Plus進(jìn)行分頁(yè)查詢時(shí),可能會(huì)遇到查詢SQL中出現(xiàn)兩個(gè)limit語(yǔ)句的問(wèn)題,這通常是由于在多個(gè)模塊中重復(fù)引入了MyBatis-Plus的分頁(yè)插件所導(dǎo)致的,下面就來(lái)介紹一下如何解決,感興趣的可以了解一下2024-10-10Springboot整合PageOffice 實(shí)現(xiàn)word在線編輯保存功能
這篇文章主要介紹了Springboot整合PageOffice 實(shí)現(xiàn)word在線編輯保存,本文以Samples5 為示例文件結(jié)合示例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2021-08-08Okhttp在SpringBoot中的應(yīng)用實(shí)戰(zhàn)記錄(太強(qiáng)了)
這篇文章主要給大家介紹了關(guān)于Okhttp在SpringBoot中應(yīng)用實(shí)戰(zhàn)的相關(guān)資料,在Spring Boot中使用OkHttp主要是為了發(fā)送HTTP請(qǐng)求和處理響應(yīng),OkHttp是一個(gè)高效、易用的HTTP客戶端庫(kù),它具有簡(jiǎn)潔的API和強(qiáng)大的功能,需要的朋友可以參考下2023-12-12kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼
這篇文章主要介紹了kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Java FileDescriptor總結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
FileDescriptor 是“文件描述符”??梢员挥脕?lái)表示開放文件、開放套接字等。接下來(lái)通過(guò)本文給大家分享Java FileDescriptor總結(jié),感興趣的朋友一起學(xué)習(xí)吧2017-05-05