快速學習Spring Data JPA -- 第七章JPA擴充套件Auditing
阿新 • • 發佈:2018-11-01
xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!
整個JPA框架的東西很多,前面的一至六章其實已經可以滿足我們工作中的大部分需求。那麼還有一小部分比較不常用的我們就開始歸納到第七章及後面的章節。本章我們主要講Auditing及其事件詳解,瞭解它的主要作用及使用。
Auditing的作用可以直接歸納為幫助我們有效的記錄資料的變更。它主要的四個註解如下:
- @CreatedBy:哪個使用者建立的。
- @CreatedDate:建立的時間。
- @LastModifiedBy:修改實體的使用者。
- @LastModifiedDate:最後一次修改時間。
要使用它也比較簡單,記住一下幾個步驟即可:
第一步:到資料庫對應的對映類上面加上@EntityListeners(AuditingEntityListener.class)
第二部:在啟動類上面新增@EnableJpaAuditing(注意這裡針對的是springboot專案)
第三部:在實體類對應的欄位上加上你需要的註解
package com.echo.example.example.entity;
import lombok.Data;
import org.springframework.data.annotation. CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
/**
* author:XLecho
* Date:2018/10/29 0029
* Time:16:16
*/
@Data
@Entity
@Table(name = "consumer")
@EntityListeners(AuditingEntityListener.class)
public class Consumer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
@CreatedBy
@Column(name = "operation_id")
private Long operationId;
@CreatedDate
@Column(name = "create_time")
private Date createTime;
@LastModifiedDate
@Column(name = "update_time")
private Date updateTime;
}
第四部:實現AuditorAware介面告訴JPA當前的使用者是誰(由於我們這裡沒有做任何安全框架整合,和登陸功能,所以我們手動造一個返回使用者)
package com.echo.example.example.auditing;
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
/**
* author:XLecho
* Date:2018/10/29 0029
* Time:16:35
*/
public class MyAuditorAware implements AuditorAware<Long> {
@Override
public Optional<Long> getCurrentAuditor() {
return Optional.of(new Long(1));
}
}
執行一次插入資料操作
package com.echo.example.example.controller;
/**
* author:XLecho
* Date:2018/10/25 0025
* Time:19:12
*/
@RestController
@RequestMapping(path = "/demo")
public class UserController {
@Autowired
private ConsumerRepository consumerRepository;
@RequestMapping(value = "/auditing", method = RequestMethod.GET)
public void auditingTest(){
Consumer consumer = new Consumer();
consumer.setEmail("ccc");
consumer.setName("ccc");
consumerRepository.save(consumer);
}
}
當執行完成插入操作之後,我們觀察資料庫,就可以看到,資料庫中不僅僅設定進了email、name,而且還設定進了operation_id和create_time、update_time;(注意,自mysql5.7之後,有很多的資料庫是支援時間的自動填充的,但是本章節所使用的mysql為5.6.沒有該功能。出現的數值都是auditing的作用)
資料庫顯示資料如下: