JPA中@CreatedDate和@LastModifiedDate的使用方式
前些時間寫了新項目,然后嘗試使用了Spring Data JPA,發(fā)現(xiàn)新世界。
很多功能都可以基于注解實現(xiàn),為開發(fā)省去了不少功夫。
關(guān)于時間的生成注解@CreatedDate和@LastModifiedDate的使用,在此記錄一下。
一、使用步驟
1.在實體類上加上注解 @EntityListeners(AuditingEntityListener.class),在相應(yīng)的字段上添加對應(yīng)的時間注解 @LastModifiedDate 和 @CreatedDate。
注意:日期的類型可以使用Date,也可以使用Long。我一般習(xí)慣用Date。
//@Data lombok注解,替我們生成getter和setter。
@Data
@Entity
@Table(name = "task")
@EntityListeners(AuditingEntityListener.class)
public class Task {
/**
* 自增主鍵
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
/**
* 創(chuàng)建時間
*/
@CreatedDate
@Column(name = "createTime", columnDefinition = "timestamp not null default current_timestamp")
private Date createTime;
/**
* 更新時間
*/
@LastModifiedDate
@Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
private Date updateTime;
}
2.在Application啟動類中添加注解 @EnableJpaAuditing。
@EnableJpaAuditing
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
3.除了上面提到的注解外,Spring Data JPA 還提供 @CreatedBy 和 @LastModifiedBy 注解,用于保存和更新當(dāng)前操作用戶的信息(如id、name)。
如果有這方面的需求,可以參考下面的配置實現(xiàn),代碼如下:
@Data
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Task {
/**
* 自增主鍵
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
/**
* 創(chuàng)建時間
*/
@CreatedDate
@Column(name = "createTime", columnDefinition = "timestamp not null default current_timestamp")
private Date createTime;
/**
* 更新時間
*/
@LastModifiedDate
@Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
private Date updateTime;
/**
* 創(chuàng)建人
*/
@CreatedBy
@Column(name = "createBy", columnDefinition = "varchar(255) not null")
private String createBy;
/**
* 最后修改人
*/
@LastModifiedBy
@Column(name = "lastModifiedBy", columnDefinition = "varchar(255) not null")
private String lastModifiedBy;
}
二、獲取操作員信息
/**
* Spring Data JPA通過AuditorAware<T>接口獲取用戶信息,
* 其中泛型T可以為String保存用戶名,也可以為Long/Integer保存用戶ID。
* @author EvanWang
*
*/
@Component
public class AuditorConfig implements AuditorAware<String> {
/**
* 返回操作員標(biāo)志信息
*
* @return
*/
@Override
public Optional<String> getCurrentAuditor() {
// 這里應(yīng)根據(jù)實際業(yè)務(wù)情況獲取具體信息
return Optional.of(userName);
}
}
三、補充注解
Hibernate 也提供了類似上述時間注解的功能實現(xiàn),這種方法只需要一步配置,更改為注解 @UpdateTimestamp 和 @CreationTimestamp
代碼如下:
@Data
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@UpdateTimestamp
@Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
private Date updateTime;
@CreationTimestamp
@Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
private Date createTime;
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫詳解
這篇文章主要為大家詳細(xì)介紹了Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
Java設(shè)計模塊系列之書店管理系統(tǒng)單機版(三)
這篇文章主要為大家詳細(xì)介紹了Java單機版的書店管理系統(tǒng)設(shè)計模塊和思想第三章,感興趣的小伙伴們可以參考一下2016-08-08
MyBatisPlus防全表更新與刪除的實現(xiàn)示例
本文主要介紹了MyBatisPlus防全表更新與刪除的實現(xiàn)示例,針對 update 和 delete 語句,阻止惡意的全表更新和全表刪除,具有一定的參考價值,感興趣的可以了解一下2023-10-10
關(guān)于Map的遍歷以及轉(zhuǎn)JsonArray存儲方式
在Java開發(fā)過程中,經(jīng)常會遇到需要對復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理的情況,本案例以List<Map<String,Object>>為例,介紹了如何遍歷該數(shù)據(jù)結(jié)構(gòu),并根據(jù)特定條件篩選出符合要求的元素,通過自定義一個Edit類來模擬形成一個新的Map對象,實現(xiàn)了數(shù)據(jù)的有序存儲2024-11-11

