欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JPA之@EnableJpaAuditing注解使用

 更新時(shí)間:2021年12月21日 10:57:08   作者:小白寫程序  
這篇文章主要介紹了JPA之@EnableJpaAuditing注解使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@EnableJpaAuditing注解使用

在Spring JPA中,支持在字段或方法上進(jìn)行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy。具體含義:

  • @CreateDate:表示該字段是創(chuàng)建時(shí)間字段,在這個(gè)實(shí)體被insert的時(shí)候,會(huì)自動(dòng)填充創(chuàng)建的時(shí)間,不用手動(dòng)填充該字段。
  • @CreatedBy:表示該字段是創(chuàng)建人字段,在這個(gè)實(shí)體被insert的時(shí)候,會(huì)自動(dòng)填充創(chuàng)建人字段,不用手動(dòng)填充。
  • @LastModifiedDate、@LastModifiedBy同理。

如何實(shí)現(xiàn)自動(dòng)填充功能,即如何使用審計(jì)?

1、在Xxx Application 啟動(dòng)類上添加 @EnableJpaAuditing:開(kāi)啟審計(jì)功能。

@EnableScheduling
@EnableJpaAuditing //利用jpa可以給MySQL列屬性自動(dòng)賦值,例如一些創(chuàng)建時(shí)間,修改時(shí)間
@EnableEurekaClient
@SpringBootApplication
public class CouponTemplateApplication {
    public static void main(String[] args) {
        SpringApplication.run(CouponTemplateApplication.class, args);
    }
 /**
     * 測(cè)試中如果無(wú)法自動(dòng)識(shí)別,可能是包路徑的問(wèn)題,采用手動(dòng)聲明bean的方式
     * @return
     */
    @Bean
    public UserAuditor setUserAuditorAware(){
        return new UserAuditor();
    }
}

2、實(shí)體類上添加 @EntityListeners(AuditingEntityListener.class):開(kāi)啟實(shí)體類監(jiān)聽(tīng)。

3、在需要的字段上加上 @CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 等注解。

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity  //實(shí)體類
@EntityListeners(AuditingEntityListener.class) //監(jiān)聽(tīng)器,自動(dòng)賦值創(chuàng)建時(shí)間
@Table(name = "coupon_template")
@JsonSerialize(using = CouponTemplateSerialize.class) //綁定自定義的序列化器
public class CouponTemplate implements Serializable {
    /** 自增主鍵 */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id",nullable = false)
    @Basic //指定屬于我們數(shù)據(jù)表的一個(gè)列,相反的@Transient,表示該列不屬于數(shù)據(jù)表
    private Integer id;
    /** 是否是可用狀態(tài) */
    @Column(name = "available",nullable = false)
    private Boolean available;
    /** 是否過(guò)期 */
    @Column(name = "expired",nullable = false)
    private Boolean expired;
    /** 優(yōu)惠券名稱 */
    @Column(name = "name",nullable = false)
    private String name;
    /** 優(yōu)惠券 logo */
    @Column(name = "logo",nullable = false)
    private String logo;
    /** 優(yōu)惠券描述 */
    @Column(name = "intro",nullable = false)
    private String desc;
    
    /** 優(yōu)惠券模板 創(chuàng)建時(shí)間
     *      使用@CreateDate注解在插入的時(shí)候,自動(dòng)生成創(chuàng)建時(shí)間,與監(jiān)聽(tīng)注解有關(guān)
     * */
    @CreatedDate
    @Column(name = "create_time",nullable = false)
    private Date createTime;
}

4、實(shí)現(xiàn) AuditorAware 接口來(lái)返回你需要插入的值。重點(diǎn)!

@Configuration
@Slf4j
public class UserAuditor implements AuditorAware<String> {
    /**
     * 獲取當(dāng)前創(chuàng)建或修改的用戶
     * @return
     */
    @Override
    public Optional<String> getCurrentAuditor() {
        UserDetails user;
        try {
            user = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            return Optional.ofNullable(user.getUsername());
        }catch (Exception e){
            return Optional.empty();
        }
    }
}

Springboot啟用Spring Data JPA Auditing(審計(jì)功能)

Auditing功能簡(jiǎn)介

先貼上Spring Data JPA的官方文檔

項(xiàng)目中每條數(shù)據(jù)在創(chuàng)建修改的時(shí)候,我們都需要記錄它創(chuàng)建人,創(chuàng)建時(shí)間,修改人,修改時(shí)間。如果每次新增的時(shí)候都去手動(dòng)set,代碼冗余且顯得很不友好

spring data JPA 為我們提供了審計(jì)功能,英文是 Auditing

在這里插入圖片描述

Auditing包括了四個(gè)注解,從名字就能看出它們的作用

  • @CreatedBy:創(chuàng)建人,在這個(gè)實(shí)體被insert的時(shí)候,會(huì)設(shè)置值
  • @LastModifiedBy:最后一次修改人,在這個(gè)實(shí)體每次被更新的時(shí)候,會(huì)設(shè)置值
  • @CreatedDate:創(chuàng)建時(shí)間,在這個(gè)實(shí)體被insert的時(shí)候,會(huì)設(shè)置值
  • @LastModifiedDate:最后一次修改時(shí)間,在這個(gè)實(shí)體每次被更新的時(shí)候,會(huì)設(shè)置值

如何啟用

1.啟動(dòng)類上加@EnableJpaAuditing注解

在這里插入圖片描述

2.實(shí)體類上加@EntityListeners(AuditingEntityListener.class)

在這里插入圖片描述

3.屬性上面使用對(duì)應(yīng)注解

在這里插入圖片描述

使用CreatedBy和LastModifiedBy時(shí)

JPA并不知道你的這個(gè)字段的值是什么,需要自己實(shí)現(xiàn)AuditorAware接口

import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Optional;
/**
 *  使用@CreatedBy或@LastModifiedBy 則必須實(shí)現(xiàn)AuditorAware接口重寫getCurrentAuditor方法
 * 在定義使用@CreatedBy或@LastModifiedBy時(shí),屬性類型必須與AuditorAware接口的泛型類型相同
 */
@Configuration
public class SpringSecurityAuditorAware  implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        UserDetails userDetails;
        try {
            userDetails =  (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            return Optional.ofNullable(userDetails.getUsername());
        }catch (Exception e){
            return Optional.empty();
        }
    }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 輸出java進(jìn)程的jstack信息示例分享 通過(guò)線程堆棧信息分析java線程

    輸出java進(jìn)程的jstack信息示例分享 通過(guò)線程堆棧信息分析java線程

    通過(guò)ps到j(luò)ava進(jìn)程號(hào)將進(jìn)程的jstack信息輸出。jstack信息是java進(jìn)程的線程堆棧信息,通過(guò)該信息可以分析java的線程阻塞等問(wèn)題。
    2014-01-01
  • Java使用反射獲取list泛型過(guò)程淺析

    Java使用反射獲取list泛型過(guò)程淺析

    這篇文章主要介紹了Java使用反射獲取list泛型過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • 使用IDEA畫UML圖的詳細(xì)步驟

    使用IDEA畫UML圖的詳細(xì)步驟

    UML是面向?qū)ο笤O(shè)計(jì)的建模工具,獨(dú)立于任何具體程序設(shè)計(jì)語(yǔ)言,是一種為面向?qū)ο笙到y(tǒng)的產(chǎn)品進(jìn)行說(shuō)明、可視化和編制文檔的一種標(biāo)準(zhǔn)語(yǔ)言,本文重點(diǎn)給大家介紹使用IDEA畫UML圖的詳細(xì)步驟,需要的朋友參考下吧
    2021-06-06
  • Java高級(jí)架構(gòu)之FastDFS分布式文件集群詳解

    Java高級(jí)架構(gòu)之FastDFS分布式文件集群詳解

    這篇文章主要介紹了Java高級(jí)架構(gòu)之FastDFS分布式文件集群詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • Java中Mybatis分頁(yè)查詢的四種傳參方式

    Java中Mybatis分頁(yè)查詢的四種傳參方式

    這篇文章主要介紹了Java中Mybatis分頁(yè)查詢的四種傳參方式:順序傳參,@param傳參,自定義POJO類傳參,Map傳參,想詳細(xì)了解傳參方式的小伙伴可以詳細(xì)閱讀本文,有一定的而參考價(jià)值
    2023-03-03
  • Java實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法的示例代碼

    Java實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法的示例代碼

    時(shí)間片輪轉(zhuǎn)調(diào)度是一種最古老,最簡(jiǎn)單,最公平且使用最廣的算法,這篇文章主要為大家介紹了如何利用Java實(shí)現(xiàn)這一算法,需要的可以參考一下
    2023-07-07
  • Spring Boot如何優(yōu)雅的使用多線程實(shí)例詳解

    Spring Boot如何優(yōu)雅的使用多線程實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何優(yōu)雅的使用多線程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 淺聊一下Spring?Security的使用方法

    淺聊一下Spring?Security的使用方法

    Spring?Security?是一個(gè)基于?Spring?框架的安全框架,提供了一套安全性認(rèn)證和授權(quán)的解決方案,用于保護(hù)?Web?應(yīng)用程序和服務(wù),接下來(lái)小編就和大家聊聊Spring?Security,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-08-08
  • Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問(wèn)題及解決

    Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問(wèn)題及解決

    這篇文章主要介紹了Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用IDEA和Gradle構(gòu)建Vertx項(xiàng)目(圖文步驟)

    使用IDEA和Gradle構(gòu)建Vertx項(xiàng)目(圖文步驟)

    這篇文章主要介紹了使用IDEA和Gradle構(gòu)建Vertx項(xiàng)目(圖文步驟),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論