最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間

 更新時(shí)間:2021年01月29日 16:43:43   作者:miskss  
這篇文章主要介紹了Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

一般來(lái)說(shuō)創(chuàng)建時(shí)間和修改時(shí)間 兩個(gè)字段是一個(gè)實(shí)體類必備的。

在阿里Java開發(fā)手冊(cè)中也對(duì)此的說(shuō)明:

【強(qiáng)制】表必備三字段:id, create_time, update_time。

說(shuō)明:其中 id 必為主鍵,類型為 bigint unsigned、單表時(shí)自增、步長(zhǎng)為 1。create_time, update_time 的類型均為 datetime 類型,前者現(xiàn)在時(shí)表示主動(dòng)式創(chuàng)建,后者過(guò)去分詞表示被動(dòng)式更新。

mysql 實(shí)現(xiàn)添加時(shí)間自動(dòng)添加更新時(shí)間自動(dòng)更新

在JPA 中也是支持新的數(shù)據(jù)保存是自動(dòng)寫入創(chuàng)建時(shí)間,當(dāng)數(shù)據(jù)有修改時(shí) 自動(dòng)記錄修改時(shí)間。在SpringBoot 的啟動(dòng)類上加 @EnableJpaAuditing 來(lái)開啟時(shí)間的支持, 在字段上使用 @CreatedDate 和@LastModifiedDate 注解來(lái)即可完成時(shí)間的自動(dòng)更新。

實(shí)例:

@EnableJpaAuditing
@SpringBootApplication
public class StudentApplication {
 public static void main(String[] args) {
 SpringApplication.run(StudentApplication.class, args);
 }
}
@EntityListeners(value = AuditingEntityListener.class)
@Getter
@Setter
@Entity
public class StudentEntity {
 ....
 @CreatedDate
 @Column(nullable = false, updatable = false)
 private LocalDateTime createTime;
 @LastModifiedDate
 @Column()
 private LocalDateTime updateTime;
 ...
}

由于這兩個(gè)字段所有實(shí)體類都有,所以可以將它們抽取到一個(gè)通用的類里面,其他實(shí)體類需要時(shí)直接繼承即可。

/**
 * 所有類的超類
 * 自動(dòng)更新創(chuàng)建時(shí)間和更新時(shí)間
 *
 * @author peter
 *
 **/
@MappedSuperclass
@EntityListeners(value = AuditingEntityListener.class)
@Getter
@Setter
public abstract class AbstractBaseTimeEntity {
 @CreatedDate
 @Column(nullable = false, updatable = false)
 private LocalDateTime createTime;
 @LastModifiedDate
 @Column()
 private LocalDateTime updateTime;
}
@Entity
@Data
public class StudentEntity extends AbstractBaseTimeEntity {
 ....
}

補(bǔ)充:Jpa配置實(shí)體類創(chuàng)建時(shí)間更新時(shí)間自動(dòng)賦值,@CreateDate,@LastModifiedDate

操作數(shù)據(jù)庫(kù)映射實(shí)體類時(shí),通常需要記錄createTime和updateTime,如果每個(gè)對(duì)象新增或修改去都去手工操作創(chuàng)建時(shí)間、更新時(shí)間,會(huì)顯得比較繁瑣。

Springboot jpa提供了自動(dòng)填充這兩個(gè)字段的功能,簡(jiǎn)單配置一下即可。@CreatedDate、@LastModifiedDate、@CreatedBy、@LastModifiedBy前兩個(gè)注解就是起這個(gè)作用的,后兩個(gè)是設(shè)置修改人和創(chuàng)建人的,這里先不討論。

首先,我們的很多實(shí)體類都是需要?jiǎng)?chuàng)建時(shí)間和更新時(shí)間的,我們不想在每個(gè)實(shí)體類里都去定義這兩個(gè)字段,那么我們把它抽取到基類中,讓實(shí)體類去繼承它。

package com.tianyalei.testautotime.entity;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
/**
 * Created by wuwf on 17/4/21.
 */
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 protected Integer id;
@CreatedDate
private Long createTime;
@LastModifiedDate
private Long updateTime;
public Integer getId() {
 return id;
}
public void setId(Integer id) {
 this.id = id;
}
public Long getCreateTime() {
 return createTime;
}
public void setCreateTime(Long createTime) {
 this.createTime = createTime;
}
public Long getUpdateTime() {
 return updateTime;
}
public void setUpdateTime(Long updateTime) {
 this.updateTime = updateTime;
}
}

AuditingEntityListener標(biāo)簽開啟后,下面的時(shí)間標(biāo)簽才會(huì)生效。

然后還需要在啟動(dòng)類加上@EnableJpaAuditing注解。

做完這些,我們來(lái)測(cè)試一下,新建個(gè)Springboot項(xiàng)目,配置一下數(shù)據(jù)庫(kù)信息

spring:
 jpa:
 database: mysql
 show-sql: true
 hibernate:
  ddl-auto: update
 datasource:
  type: com.alibaba.druid.pool.DruidDataSource
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test
  username: root
  password:

新建個(gè)普通的實(shí)體類。

package com.tianyalei.testautotime.entity;
import javax.persistence.Entity;
@Entity
public class Post extends BaseEntity {
private String title;
public String getTitle() {
 return title;
}
public void setTitle(String title) {
 this.title = title;
}
}

測(cè)試類:

import com.tianyalei.testautotime.entity.Post;
import com.tianyalei.testautotime.repository.PostRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestautotimeApplicationTests {
 @Autowired
 PostRepository postRepository;
@Test
public void save() {
 Post post = new Post();
 post.setTitle("title0");
 postRepository.save(post);
}
// @Test
// public void update() {
//  Post post = postRepository.findOne(1);
//  post.setTitle(“title1”);
//  postRepository.save(post);
// }
}

先試試新增。

可以看到已經(jīng)被自動(dòng)賦值了。

然后試試update,將上面的update的注釋放開。

可以看到更新時(shí)間也自動(dòng)修改了。

需注意,如果你沒(méi)有修改任何字段的值的話,即便走了save方法,updateTime也是不會(huì)更改的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 解決java調(diào)用dll報(bào)Unable to load library錯(cuò)誤的問(wèn)題

    解決java調(diào)用dll報(bào)Unable to load library錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了解決java調(diào)用dll報(bào)Unable to load library錯(cuò)誤的問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • java裁剪圖片并保存的示例分享

    java裁剪圖片并保存的示例分享

    在這篇文章中我們將學(xué)習(xí)如何用Java 對(duì)圖像進(jìn)行剪裁并將剪裁出來(lái)的部分單獨(dú)保存到文件中
    2014-01-01
  • 多線程下怎樣保證OkHttpClient的線程安全

    多線程下怎樣保證OkHttpClient的線程安全

    這篇文章主要介紹了多線程下怎樣保證OkHttpClient的線程安全問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 深入理解Java中Filter的作用種類及應(yīng)用場(chǎng)景

    深入理解Java中Filter的作用種類及應(yīng)用場(chǎng)景

    Filter(過(guò)濾器)是Java Web中的一種重要組件,可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行攔截處理,對(duì)數(shù)據(jù)進(jìn)行過(guò)濾和處理。Filter可以實(shí)現(xiàn)許多功能,如:鑒權(quán)、日志記錄、字符編碼轉(zhuǎn)換、數(shù)據(jù)壓縮、請(qǐng)求重定向等等
    2023-04-04
  • 解決JAVA非對(duì)稱加密不同系統(tǒng)加密結(jié)果不一致的問(wèn)題

    解決JAVA非對(duì)稱加密不同系統(tǒng)加密結(jié)果不一致的問(wèn)題

    這篇文章主要介紹了解決JAVA非對(duì)稱加密不同系統(tǒng)加密結(jié)果不一致的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Spring Boot解決項(xiàng)目啟動(dòng)時(shí)初始化資源的方法

    Spring Boot解決項(xiàng)目啟動(dòng)時(shí)初始化資源的方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何解決項(xiàng)目啟動(dòng)時(shí)初始化資源的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • JavaWeb評(píng)論功能實(shí)現(xiàn)步驟以及代碼實(shí)例

    JavaWeb評(píng)論功能實(shí)現(xiàn)步驟以及代碼實(shí)例

    項(xiàng)目初始版本上線,有時(shí)間寫點(diǎn)東西記錄一下項(xiàng)目中的心得體會(huì),通過(guò)這個(gè)項(xiàng)目學(xué)習(xí)了很多,要寫下來(lái)的有很多,先從評(píng)論功能開始吧,下面這篇文章主要給大家介紹了關(guān)于JavaWeb評(píng)論功能實(shí)現(xiàn)步驟以及代碼的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • PowerJob Alarmable工作流程源碼剖析

    PowerJob Alarmable工作流程源碼剖析

    這篇文章主要為大家介紹了PowerJob Alarmable工作流程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Spring的事件機(jī)制知識(shí)點(diǎn)詳解及實(shí)例分析

    Spring的事件機(jī)制知識(shí)點(diǎn)詳解及實(shí)例分析

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于Spring的事件機(jī)制知識(shí)點(diǎn)詳解及實(shí)例分析,有需要的朋友么可以參考下。
    2021-12-12
  • SpringBoot使用EmbeddedDatabaseBuilder進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試

    SpringBoot使用EmbeddedDatabaseBuilder進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試

    在開發(fā)SpringBoot應(yīng)用程序時(shí),我們通常需要與數(shù)據(jù)庫(kù)進(jìn)行交互,為了確保我們的應(yīng)用程序在生產(chǎn)環(huán)境中可以正常工作,我們需要進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試,在本文中,我們將介紹如何使用 SpringBoot 中的 EmbeddedDatabaseBuilder 來(lái)進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試
    2023-07-07

最新評(píng)論

漯河市| 中山市| 昌邑市| 莒南县| 台山市| 日土县| 平罗县| 伊宁市| 仲巴县| 乐亭县| 康马县| 白山市| 巴东县| 尼勒克县| 和平区| 监利县| 鄂托克前旗| 漾濞| 云浮市| 长顺县| 高阳县| 杭锦后旗| 盐津县| 北票市| 漠河县| 万年县| 英山县| 双牌县| 高尔夫| 恭城| 古交市| 曲麻莱县| 建湖县| 杭州市| 西乌珠穆沁旗| 广德县| 庆安县| 虞城县| 武穴市| 象州县| 汤原县|