guns-lite 將所有表增加維護人員和維護時間資訊
阿新 • • 發佈:2019-01-09
通常來說,我們都有這樣的需求:我需要知道庫中的資料是由誰建立,什麼時候建立,最後一次修改時間是什麼時候,最後一次修改人是誰。guns-lite最新程式碼已經實現該需求,具體實現方式網上有很多資料,這裡做會搬運工,將guns-lite的實現步驟羅列如下:
在Spring jpa中可以通過在實體bean的屬性或者方法上新增以下註解來實現上述需求@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy。
@CreatedDate 表示該欄位為建立時間時間欄位,在這個實體被insert的時候,會設定值
@CreatedBy 表示該欄位為建立人,在這個實體被insert的時候,會設定值
@LastModifiedDate 最後修改時間 實體被update的時候會設定
@LastModifiedBy 最後修改人 實體被update的時候會設定
使用方式
實體類添加註解
首先在實體中對應的欄位加上上述4個註解
在guns-lite中我們提取了一個基礎實體類BaseEntity,並將對應的欄位新增上述4個註解,所有需要記錄維護資訊的表對應的實體都整合該類
import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import java.io.Serializable; import java.util.Date; @MappedSuperclass @Data public abstract class BaseEntity implements Serializable { @Id @GeneratedValue private Long id; @CreatedDate @Column(name = "create_time",columnDefinition="DATETIME COMMENT '建立時間/註冊時間'") private Date createTime; @Column(name = "create_by",columnDefinition="bigint COMMENT '建立人'") @CreatedBy private Long createBy; @LastModifiedDate @Column(name = "modify_time",columnDefinition="DATETIME COMMENT '最後更新時間'") private Date modifyTime; @LastModifiedBy @Column(name = "modify_by",columnDefinition="bigint COMMENT '最後更新人'") private Long modifyBy; }
實現AuditorAware介面返回操作人員的id
配置完上述4個註解後,在jpa.save方法被呼叫的時候,時間欄位會自動設定並插入資料庫,但是CreatedBy和LastModifiedBy並沒有賦值 這兩個資訊需要實現AuditorAware介面來返回操作人員的id
首先需要在專案啟動類新增@EnableJpaAuditing 註解來啟用審計功能
@SpringBootApplication @EnableJpaAuditing public class AdminApplication extends WebMvcConfigurerAdapter { //省略 }
然後實現AuditorAware介面返回操作人員的id
@Configuration public class UserIDAuditorConfig implements AuditorAware<Long> { @Override public Long getCurrentAuditor() { ShiroUser shiroUser = ShiroKit.getUser(); if(shiroUser!=null){ return shiroUser.getId(); } return null; } }