佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例

詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例

熱門標(biāo)簽:銀行業(yè)務(wù) 電子圍欄 阿里云 服務(wù)器配置 團(tuán)購網(wǎng)站 Linux服務(wù)器 科大訊飛語音識別系統(tǒng) Mysql連接數(shù)設(shè)置

詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例

前言:

需求是這樣的:

1. 創(chuàng)建時(shí)間與更新時(shí)間只能由數(shù)據(jù)庫產(chǎn)生,不允許在實(shí)體類中產(chǎn)生,因?yàn)槊總€(gè)節(jié)點(diǎn)的時(shí)間/時(shí)區(qū)不一定一直。另外防止人為插入自定義時(shí)間時(shí)間。

2. 插入記錄的時(shí)候創(chuàng)建默認(rèn)時(shí)間,創(chuàng)建時(shí)間不能為空,時(shí)間一旦插入不允許日后在實(shí)體類中修改。

 3. 記錄創(chuàng)建后更新日志字段為默認(rèn)為 null 表示該記錄沒有被修改過。一旦數(shù)據(jù)被修改,修改日期字段將記錄下最后的修改時(shí)間。

4. 甚至你可以通過觸發(fā)器實(shí)現(xiàn)一個(gè)history 表,用來記錄數(shù)據(jù)的歷史修改,詳細(xì)請參考作者另一部電子書《Netkiller Architect 手札》數(shù)據(jù)庫設(shè)計(jì)相關(guān)章節(jié)。

10.1.6. 默認(rèn)時(shí)間規(guī)則

10.1.6.1. CreatedDate

Spring 提供了 import org.springframework.data.annotation.CreatedDate;

但是這些只能作用于實(shí)體類。

@CreatedDate
  private Date createdDateTime;

10.1.6.3. 數(shù)據(jù)庫級別的默認(rèn)創(chuàng)建日期時(shí)間定義

package cn.netkiller.api.domain.elasticsearch;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class ElasticsearchTrash {
 @Id
 private int id;

 @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
 private Date ctime;

 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public Date getCtime() {
 return ctime;
 }

 public void setCtime(Date ctime) {
 this.ctime = ctime;
 }

}

對應(yīng)數(shù)據(jù)庫DDL

CREATE TABLE `elasticsearch_trash` (
 `id` int(11) NOT NULL,
 `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

10.1.6.4. 數(shù)據(jù)庫級別的默認(rèn)創(chuàng)建日期與更新時(shí)間定義

需求是這樣的:

1. 創(chuàng)建時(shí)間與更新時(shí)間只能由數(shù)據(jù)庫產(chǎn)生,不允許在實(shí)體類中產(chǎn)生,因?yàn)槊總€(gè)節(jié)點(diǎn)的時(shí)間/時(shí)區(qū)不一定一直。另外防止人為插入自定義時(shí)間時(shí)間。

2. 插入記錄的時(shí)候創(chuàng)建默認(rèn)時(shí)間,創(chuàng)建時(shí)間不能為空,時(shí)間一旦插入不允許日后在實(shí)體類中修改。

3. 記錄創(chuàng)建后更新日志字段為默認(rèn)為 null 表示該記錄沒有被修改過。一旦數(shù)據(jù)被修改,修改日期字段將記錄下最后的修改時(shí)間。

4. 甚至你可以通過觸發(fā)器實(shí)現(xiàn)一個(gè)history 表,用來記錄數(shù)據(jù)的歷史修改,詳細(xì)請參考作者另一部電子書《Netkiller Architect 手札》數(shù)據(jù)庫設(shè)計(jì)相關(guān)章節(jié)。

package cn.netkiller.api.domain.elasticsearch;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Null;

@Entity
@Table
public class ElasticsearchTrash {
 @Id
 private int id;

 // 創(chuàng)建時(shí)間
 @Column(insertable = false, updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
 private Date ctime;
 
 // 修改時(shí)間
 @Column(nullable = true, insertable = false, updatable = false, columnDefinition = "TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP")
 private Date mtime;

 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public Date getCtime() {
 return ctime;
 }

 public void setCtime(Date ctime) {
 this.ctime = ctime;
 }

 public Date getMtime() {
 return mtime;
 }

 public void setMtime(Date mtime) {
 this.mtime = mtime;
 }

}

對應(yīng)數(shù)據(jù)庫DDL

CREATE TABLE `elasticsearch_trash` (
 `id` int(11) NOT NULL,
 `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

10.1.6.5. 最后修改時(shí)間

需求:記錄最后一次修改時(shí)間

package cn.netkiller.api.domain.elasticsearch;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class ElasticsearchTrash {
 @Id
 private int id;

 @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
 private Date lastModified;

}

產(chǎn)生DDL語句如下

CREATE TABLE `elasticsearch_trash` (
 `id` int(11) NOT NULL,
 `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

以上就是Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • Spring Boot中使用Spring-data-jpa實(shí)現(xiàn)數(shù)據(jù)庫增刪查改
  • Spring Data JPA實(shí)現(xiàn)動態(tài)查詢的兩種方法
  • Spring Data JPA 簡單查詢--方法定義規(guī)則(詳解)
  • 基于SpringMVC+Bootstrap+DataTables實(shí)現(xiàn)表格服務(wù)端分頁、模糊查詢
  • SpringBoot集成Spring Data JPA及讀寫分離
  • springboot整合spring-data-redis遇到的坑

標(biāo)簽:衡水 廣元 衢州 江蘇 蚌埠 棗莊 萍鄉(xiāng) 大理

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    临漳县| 汤原县| 嘉义县| 镇赉县| 嘉定区| 香河县| 剑阁县| 东辽县| 平顺县| 云和县| 丰县| 治县。| 高雄市| 泌阳县| 萝北县| 新乡市| 中江县| 马公市| 嵊州市| 宜春市| 浦县| 南充市| 泰和县| 浦东新区| 神农架林区| 石阡县| 虞城县| 海兴县| 遂宁市| 当阳市| 佳木斯市| 黑水县| 武汉市| 张家口市| 体育| 沂源县| 汉阴县| 伊春市| 濮阳市| 高清| 德令哈市|