java實現(xiàn)mysql自動更新創(chuàng)建時間與更新時間的兩種方式
一:通過數(shù)據(jù)庫自身實現(xiàn)
1 、創(chuàng)建表的時候加上 create_time 與 update_time 兩個字段
create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間', update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
2、若表已經(jīng)存在,這兩個字段不存在,則添加這兩個字段
ALTER TABLE `table_name` ADD COLUMN `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間'; ALTER TABLE `table_name` ADD COLUMN `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間'
3、若表與這兩個字段均存在,但字段不是自動獲取數(shù)據(jù)庫時間,則修改字段
ALTER TABLE `table_name` MODIFY COLUMN `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間'; ALTER TABLE `table_name` MODIFY COLUMN `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間'
4、可以使用可視化工具設(shè)置,以navicat為例
1)鼠標右鍵 設(shè)計表
2)選擇添加字段,字段名為 create_time ,類型為 timestamp,默認 CURRENT_TIMESTAMP
3)選中根據(jù)當前時間戳更新
二:通過mybatisplus的TableField注解添加
1)在實體類上的createTime與updateTime上添加注解:
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;2)自定義元數(shù)據(jù)對象處理器繼承MetaObjectHandler接口,實現(xiàn)insertFill與updateFill方法,這兩個接口類似攔截器,在執(zhí)行數(shù)據(jù)庫insert與update操作的時候自動執(zhí)行這兩個方法,因此如果有創(chuàng)建人與修改人等需要自動創(chuàng)建修改的字段也可以在其中添加
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ù)對象處理器
*/
@Component
@Slf4j
public class MyMetaObjecthandler implements MetaObjectHandler {
/**
* 插入操作,自動填充
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("公共字段自動填充[insert]...");
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime",LocalDateTime.now());
}
/**
* 更新操作,自動填充
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
log.info("公共字段自動填充[update]...");
metaObject.setValue("updateTime",LocalDateTime.now());
}
}三:若時間與當前時間相差8小時,則在my.conf文件中的[mysqld]節(jié)點設(shè)置時區(qū)參數(shù)
default-time-zone=Asia/Shanghai
若是5.7版本則是如下配置
default-time-zone = '+8:00'
如果mysql是docker創(chuàng)建的,則需要調(diào)整mysql容器內(nèi)的系統(tǒng)日期時間
//1、把當前宿主機的時區(qū)信息復(fù)制到mysql容器的時區(qū)中 docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名稱或Id:etc/localtime //2、重啟mysql服務(wù)即可 docker restart 容器名稱或Id
到此這篇關(guān)于java實現(xiàn)mysql自動更新創(chuàng)建時間與更新時間的兩種方式的文章就介紹到這了,更多相關(guān)java mysql自動更新時間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL?時區(qū)與?serverTimezone詳解
存儲?TIMESTAMP?類型數(shù)據(jù)時,MySQL 會根據(jù)當前會話的時區(qū)將時間轉(zhuǎn)換為 UTC 時間,MySQL 實際存儲的是 UTC 時間,這篇文章主要介紹了MySQL?時區(qū)與?serverTimezone,需要的朋友可以參考下2024-12-12
詳解如何利用amoeba(變形蟲)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離
這篇文章主要介紹了詳解如何利用amoeba(變形蟲)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05
Linux下MYSQL 5.7 找回root密碼的問題(親測可用)
這篇文章主要介紹了Linux下MYSQL 5.7 找回root密碼的問題(親測可用),通過 --skip-grant-tables 找回,新增完成后,:wq 保存退出,重啟mysqld服務(wù),具體內(nèi)容詳情跟隨小編一起看看吧2021-10-10
MySQL主庫binlog(master-log)與從庫relay-log關(guān)系代碼詳解
這篇文章主要介紹了MySQL主庫binlog與從庫relay-log關(guān)系的相關(guān)內(nèi)容,涉及部分代碼,需要的朋友可以參考。2017-10-10

