詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例
詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例
前言:
需求是這樣的:
1. 創(chuàng)建時(shí)間與更新時(shí)間只能由數(shù)據(jù)庫(kù)產(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ì)請(qǐng)參考作者另一部電子書《Netkiller Architect 手札》數(shù)據(jù)庫(kù)設(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ù)庫(kù)級(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;
}
}
對(duì)應(yīng)數(shù)據(jù)庫(kù)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ù)庫(kù)級(jí)別的默認(rèn)創(chuàng)建日期與更新時(shí)間定義
需求是這樣的:
1. 創(chuàng)建時(shí)間與更新時(shí)間只能由數(shù)據(jù)庫(kù)產(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ì)請(qǐng)參考作者另一部電子書《Netkiller Architect 手札》數(shù)據(jù)庫(kù)設(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;
}
}
對(duì)應(yīng)數(shù)據(jù)庫(kù)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語(yǔ)句如下
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ǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
JSP開發(fā)入門(二)----JSP語(yǔ)法的基本原理
JSP開發(fā)入門(二)----JSP語(yǔ)法的基本原理...2006-10-10
JSP技術(shù)實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面到靜態(tài)頁(yè)面的方法
實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面到靜態(tài)頁(yè)面以減小數(shù)據(jù)庫(kù)與服務(wù)器的壓力和負(fù)擔(dān),這是很多實(shí)際開發(fā)應(yīng)用工作當(dāng)中的一個(gè)理想的解決辦法,那么本文就向你講解如何實(shí)現(xiàn)實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面到靜態(tài)頁(yè)面的方案。2016-10-10
jsp中頁(yè)面之間的跳轉(zhuǎn)forward與sendRedirect的區(qū)別
頁(yè)面之間的跳轉(zhuǎn)可以通過兩種方式實(shí)現(xiàn):forward和sendRedirect;forward:可以在JSP頁(yè)面中使用,可以在Servlet中實(shí)現(xiàn),需要的朋友可以了解下2012-12-12
jsp項(xiàng)目中更改tomcat的默認(rèn)index.jsp訪問路徑的方法
如何更改tomcat的默認(rèn)index.jsp訪問路徑,jsp的工程下有一個(gè)叫做WEB-INF文件夾下的web.xml打開它,按照下面的方法即可修改2013-11-11
基于jsp+servlet實(shí)現(xiàn)的簡(jiǎn)單博客系統(tǒng)實(shí)例(附源碼)
這篇文章主要介紹了基于jsp+servlet實(shí)現(xiàn)的簡(jiǎn)單博客系統(tǒng),以完整實(shí)例形式分析了基于jsp+servlet簡(jiǎn)單博客系統(tǒng)的原理與相關(guān)技巧,并附帶了完整源碼供讀者下載學(xué)習(xí),需要的朋友可以參考下2015-09-09
jsp實(shí)現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫(kù)的方法
下面小編就為大家分享一篇jsp實(shí)現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫(kù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01

