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

JPA之@EnableJpaAuditing注解使用

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

@EnableJpaAuditing注解使用

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

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

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

1、在Xxx Application 啟動類上添加 @EnableJpaAuditing:開啟審計功能。

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

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

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

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity  //實(shí)體類
@EntityListeners(AuditingEntityListener.class) //監(jiān)聽器,自動賦值創(chuàng)建時間
@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ù)表的一個列,相反的@Transient,表示該列不屬于數(shù)據(jù)表
    private Integer id;
    /** 是否是可用狀態(tài) */
    @Column(name = "available",nullable = false)
    private Boolean available;
    /** 是否過期 */
    @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)建時間
     *      使用@CreateDate注解在插入的時候,自動生成創(chuàng)建時間,與監(jiān)聽注解有關(guān)
     * */
    @CreatedDate
    @Column(name = "create_time",nullable = false)
    private Date createTime;
}

4、實(shí)現(xiàn) AuditorAware 接口來返回你需要插入的值。重點(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(審計功能)

Auditing功能簡介

先貼上Spring Data JPA的官方文檔

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

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

在這里插入圖片描述

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

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

如何啟用

1.啟動類上加@EnableJpaAuditing注解

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

使用CreatedBy和LastModifiedBy時

JPA并不知道你的這個字段的值是什么,需要自己實(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時,屬性類型必須與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();
        }
    }

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

相關(guān)文章

  • java Springboot實(shí)現(xiàn)多文件上傳功能

    java Springboot實(shí)現(xiàn)多文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了java Springboot實(shí)現(xiàn)多文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • java中Map集合的常用方法總結(jié)大全

    java中Map集合的常用方法總結(jié)大全

    開發(fā)中最常用的就是List集合和Map集合,Map集合是基于java核心類java.util中的,下面這篇文章主要給大家總結(jié)介紹了關(guān)于java中Map集合的一些常用方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Spring?Security?登錄時添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例

    Spring?Security?登錄時添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例

    這篇文章主要為大家介紹了Spring?Security?登錄時添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • spring-boot使用Admin監(jiān)控應(yīng)用的方法

    spring-boot使用Admin監(jiān)控應(yīng)用的方法

    本篇文章主要介紹了spring-boot使用Admin監(jiān)控應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 淺談java Iterator.remove()方法的用法(詳解)

    淺談java Iterator.remove()方法的用法(詳解)

    下面小編就為大家?guī)硪黄獪\談java Iterator.remove()方法的用法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • IDEA中創(chuàng)建properties配置文件

    IDEA中創(chuàng)建properties配置文件

    我們在j2ee當(dāng)中,連接數(shù)據(jù)庫的時候經(jīng)常會用到properties配置文件,本文主要介紹了IDEA中創(chuàng)建properties配置文件,具有一定的參考價值,?感興趣的可以了解一下
    2024-04-04
  • Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解

    Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解

    這篇文章主要介紹了Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解,在使用Netty進(jìn)行TCP消息傳輸時,為了上層協(xié)議能夠?qū)ο⒄_區(qū)分,避免粘包和拆包導(dǎo)致的問題,一般可以通過消息定長、將回車換行符作為消息結(jié)束符,需要的朋友可以參考下
    2023-12-12
  • JAVA進(jìn)階之HashMap底層實(shí)現(xiàn)解析

    JAVA進(jìn)階之HashMap底層實(shí)現(xiàn)解析

    Hashmap是java面試中經(jīng)常遇到的面試題,大部分都會問其底層原理與實(shí)現(xiàn),為了能夠溫故而知新,特地寫了這篇文章,以便時時學(xué)習(xí)
    2021-11-11
  • Java反射之類的實(shí)例對象的三種表示方式總結(jié)

    Java反射之類的實(shí)例對象的三種表示方式總結(jié)

    下面小編就為大家?guī)硪黄狫ava反射之類的實(shí)例對象的三種表示方式總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • Java中數(shù)組復(fù)制的三種方式小結(jié)

    Java中數(shù)組復(fù)制的三種方式小結(jié)

    在Java中,數(shù)組復(fù)制是一種常見的操作,它允許開發(fā)人員在不修改原始數(shù)組的情況下創(chuàng)建一個新的數(shù)組,本文就來介紹三種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論

平潭县| 奈曼旗| 茂名市| 兴和县| 葵青区| 洛南县| 连南| 得荣县| 双辽市| 社旗县| 象山县| 万安县| 陆河县| 当阳市| 东乡| 韶山市| 青铜峡市| 松桃| 临沭县| 理塘县| 宁陵县| 沙洋县| 嵊泗县| 招远市| 阿克| 富宁县| 剑阁县| 田阳县| 白玉县| 富阳市| 宁海县| 贡觉县| 盐边县| 治县。| 元谋县| 威海市| 青冈县| 郧西县| 克拉玛依市| 金沙县| 曲沃县|