久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL語句中如何實現公共字段的自動填充方法

128次閱讀
沒有評論

共計 2189 個字符,預計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章主要介紹了 SQL 語句中如何實現公共字段的自動填充方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

1. 前言

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

2. 通用方式

那么有什么好的解決思路呢?在 Spring Data 框架中提供 @CreatedBy 和 @LastModifiedBy 來捕捉誰創建或修改的實體以及 @CreatedDate 和 @LastModifiedDate 來捕捉合適創建或修改了實體。如果你使用相關的框架就可以使用這些特性。那么其實我們知道國內 Spring Data JDBC、Spring Data JPA 并不是主流,主流的是 Mybatis。那么我們有哪些選擇?

2.1 開發 Mybatis 審計插件

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

2.2 Mybatis Plus 自動填充

如果你使用了 Mybatis Plus,可以借助于其自動填充功能來實現。

基于 Mybatis Plus 3.3.0

只需要實現 MetaObjectHandler 接口:

@Component
public class MybatisAuditHandler implements MetaObjectHandler {
 @Override
 public void insertFill(MetaObject metaObject) {
 //  聲明自動填充字段的邏輯。 String userId = AuthHolder.getCurrentUserId();
 this.strictInsertFill(metaObject, creator ,String.class, userId);
 this.strictInsertFill(metaObject, createTime , LocalDateTime.class,LocalDateTime.now());
 }
 @Override
 public void updateFill(MetaObject metaObject) {
 //  聲明自動填充字段的邏輯。 String userId = AuthHolder.getCurrentUserId();
 this.strictUpdateFill(metaObject, updater ,String.class,userId);
 this.strictUpdateFill(metaObject, updateTime , LocalDateTime.class,LocalDateTime.now());
 }
}

然后我們擴展一下 Mybatis Plus 的 Model T 把公共審計字段放進去并聲明對應的填充策略:

public abstract class BaseEntity T extends Model ?  extends Model T  { @TableField(fill = FieldFill.INSERT)
 private String creator;
 @TableField(fill = FieldFill.INSERT)
 private LocalDateTime addTime;
 @TableField(fill = FieldFill.UPDATE)
 private String updater;
 @TableField(fill = FieldFill.UPDATE)
 private LocalDateTime updateTime;
}

最后我們的實體類不再直接繼承 Model T 改為上面的 BaseEntity T:

@Data
@EqualsAndHashCode(callSuper = false)
public class UserInfo extends BaseEntity UserInfo  { @TableId(value =  user_id , type = IdType.ASSIGN_ID)
 private String userId;
 private String username;
 @Override
 protected Serializable pkVal() {
 return this.userId;
 }
}

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

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“SQL 語句中如何實現公共字段的自動填充方法”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計2189字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 贵溪市| 宝兴县| 焦作市| 永德县| 和政县| 仁布县| 宣武区| 牙克石市| 民乐县| 略阳县| 绿春县| 古蔺县| 大城县| 任丘市| 偃师市| 兰考县| 天津市| 分宜县| 资兴市| 垣曲县| 南安市| 黑山县| 北京市| 航空| 连平县| 涞源县| 白山市| 休宁县| 锡林浩特市| 博兴县| 宜宾市| 赫章县| 汨罗市| 军事| 奇台县| 临桂县| 宜州市| 阿克苏市| 宜兴市| 林甸县| 娄烦县|