優雅的實現數據歷史記錄


在有些情況下,我們需要對數據的歷史實現記錄,比如當用戶信息發生變更時,我們需要記錄這個變化的數據,比如

張三從A部門轉移到B部門。這個時候,我們一般的做法是 直接數據日志記錄。

這樣導致的情況時,我們需要在各個模塊來編寫這塊代碼。這樣會導致到處都需要寫日志的記錄。

比較好的辦法是:

能夠通過統一封裝的方式來實現這個。

具體思路是:

1.日志數據庫表設計

字段名 類型 注解
id   int 主鍵
table varchar(30) 變更數據的表名
field   varchar(30) 變更的i段
recordId   varchar(30) 變更數據主鍵
valueBefore   varchar(2000) 變更前
valueAfter   varchar(2000) 變更后
operatorId varchar(30) 操作人ID
operatorName varchar(30) 操作人
createTime datetime 操作時間

 

 

 

 

 

 

 

2.在需要變更的類編寫注解。

編寫兩個注解

HistoryTable

HistoryField

@HistoryTable("employee")
class User{

@HistoryField("department")
private String department;
 
}

 

3.在更新數據的時候,不直接調用dao 去更新數據庫,而是通過代理的方式,或者使用切面的方式來實現。

public class UpdateAgent {

    void update(BaseDao baseDao,Object entity,String pk){
      compareAndRecordHistory(entity,pk);
      baseDao.update(entity);
    
    }
    
    //獲取變更字段,進行數據插入。
    private void compareAndRecordHistory(Object entity,String pk){

   }

}

這個compareAndRecordHistory方法可以先反射需要變更的字段,從表中獲取原記錄,獲取當前的數據記錄,比較看看是否發生了變更,

如果有變更則進行記錄。

這樣我們就很優雅的進行了變更記錄,開發者都不用關心歷史數據的記錄了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM