SQL語句中公共欄位的自動填充方法

2022-09-21 01:39:09 字數 1463 閱讀 4263

1. 前言

我們在設計資料庫的時候一定會帶上新增、更新的時間、操作者等審計資訊。 之所以帶這些資訊是因為假如有一天公司的資料庫被人為刪了,儘管可能有資料庫備份可以恢復資料。但是我們仍然需要追蹤到這個事是誰幹的,在什麼時間幹的,具體幹了哪些事等等,方便定責和修補。但是我們變更每條資料都要去顯式變更這些資訊就十分繁瑣,我們希望無感知的來處理這些資訊。

2. 通用方式

那麼有什麼好的解決思路呢?在spring data框架中提供@createdby和@lastmodifiedby來捕捉誰建立或修改的實體以及@creyvztctunjateddate和@lastmodifieddate來捕捉合適建立或修改了實體。如果你使用相關的框架就可以使用這些特性。那麼其實我們知道國內spring data jdbc、spring data jpa並不是主流,主流的是mybatis。那麼我們有哪些選擇?

2.1 開發mybatis審計外掛程式

如果你使用了原生的mybatis可以編寫乙個審計外掛程式來實現這些功能。我在之前講解過mybatis外掛程式的教程,並不是非常難的事。如果你想拿來就用,其實github上提供了很多可供選擇的mybatis審計元件,本來我打算手寫乙個,但是確實人家寫的好。你可以通過關鍵詞mybatis audit來搜尋到它們選擇一款最適合你的。

2.2 mybatis pluswww.cppcns.com 自動填充

如果你使用了mybatis plus,可以借助於其自動填充功能來實現。

基於 mybatis plus 3.3.0

只需要實現metaobjecthandler介面:

@component

public class mybatisaudithandler implements metaobjecthandler

@override

public void updatefill(metaobject metaobject)

}然後我們擴充套件一下mybatis plus的model把公共審計字段放進去並宣告對應的填充策略:

public abstract class baseentity> extends model

最後我們的實體類不再直接繼承model改為上面的baseentity:

@data

@equalsandhashcode(callsuper = false)

public class userinfo extends baseentity

}這樣我們就不用再關心這幾個公共欄位了,當然你可以根據需要新增更多你需要填充的字段。

3. 總結

今天我們sql審計中的一些公共欄位的自動填充的常用方案進行了一些介紹,特別對mybatis plus提供程式設計客棧的功能進行了介紹相信能夠幫助你簡化一些樣板**的編寫。但是sql審計並不僅僅這麼簡單,根據你的業務的不同會有不同的設計。如果設計的更加精細化的話,會通過映象或探針的方式採集所有資料庫的訪問流量,並基於sql語法、語義的解析技術,記錄下資料庫的所有訪問和操作行為。有空可以從網上獲取相關的資料進行了解。

如何自動填充SQL語句中的公共字段

我們在設計資料庫的時候一定會帶上新增 更新的時間 操作者等審計資訊。之所以帶這些資訊是因為假如有一天公司的資料庫被人為刪了,儘管可能有資料庫備份可以恢復資料。但是我們仍然需要追蹤到這個事是誰幹的,在什麼時間幹的,具體幹了哪些事等等,方便定責和修補。但是我們變更每條資料都要去顯式變更這些資訊就十分繁瑣...

Mybatis Plus公共字段自動填充 動力節點

如果你使用了mybatis plus,可以借助於其自動填充功能來實現。基於 mybatis plus 3.3.0 只需要實現metaobjecthandler介面 component public class mybatisaudithandler implements metaobjecthand...

sql語句中的序號自動增加

a.直接定義,例如 字段型別設定為int型,種子為1,增量。即可。identity startvalues,addvalues a int identity 35,1 這就表示欄位a的,初始值是35,以1自動增加 也就是說如果你的第一條記錄是,那麼下一條記錄就是36 其中的 35和1 根據自己的實際...