1. 程式人生 > >guns-lite 將所有表增加維護人員和維護時間資訊

guns-lite 將所有表增加維護人員和維護時間資訊

  

通常來說,我們都有這樣的需求:我需要知道庫中的資料是由誰建立,什麼時候建立,最後一次修改時間是什麼時候,最後一次修改人是誰。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;
    }
}