最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot基于MyBatisPlus實現(xiàn)公共字段自動填充

 更新時間:2025年08月21日 08:47:25   作者:future romance  
本文介紹了一種在MyBatisPlus中實現(xiàn)公共字段自動填充的方法,包括創(chuàng)建MetaObjectHandler實現(xiàn)類和在實體類中添加注解,具有一定的參考價值,感興趣的可以了解一下

問題背景

在增加或修改記錄時,常常需要對一些公共字段進行設置,如創(chuàng)建時間(createTime)、創(chuàng)建人(createUser)、修改時間(updateTime)、修改人(updateUser),這些信息一般不來自于網(wǎng)頁請求。實際項目中可能有很多種Entity(實體類),對每一個Entity對應的業(yè)務代碼中都要寫這些針對公共字段的操作,造成了代碼的大量重復。

因此,可以創(chuàng)建一個用于公共字段自動填充的類,使得公共字段實現(xiàn)自動填充。

實現(xiàn)方式

主要分為兩大部分:

  • 1. MetaObjectHandler實現(xiàn)類創(chuàng)建
  • 2. 實體類中公共字段添加注解

1. MetaObjectHandler實現(xiàn)類創(chuàng)建

首先,建立一個MetaObjectHandler接口的實現(xiàn)類(MetaObjectHandler是MyBatisPlus提供的接口)

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

之后,重寫相關方法 (insertFill(MetaObject metaObject) 和 updateFill(MetaObject metaObject) )

@Override
    public void insertFill(MetaObject metaObject) {
        log.info("公共字段自動填充[insert]...");
        log.info("線程id:{}", Thread.currentThread().getId());

        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", threadLocal.get());  // 動態(tài)填充 填充當前登錄的用戶的 ID
        metaObject.setValue("updateUser", threadLocal.get());  // 動態(tài)填充 填充當前登錄的用戶的 ID
    }


    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("公共字段自動填充[update]...");
        log.info("線程id:{}", Thread.currentThread().getId());

        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser", threadLocal.get());
    }

注意:在對createUser和updateUser進行設置時(通常是設置id),無法拿到session,因此不能通過session的方式獲取id。這里使用的是ThreadLocal。

需要知道的是,頁面向服務器發(fā)送的每一個請求,在服務器端都會有一個獨立的線程根據(jù)該請求進行一系列操作。例如,頁面發(fā)來一個修改用戶的請求,到了服務器端,攔截器的preHandle方法、controller層的update方法,以及公共字段填充類的updateFill方法都是由同一個線程執(zhí)行的。

因此,可以在攔截器執(zhí)行preHandle方法時,將session中的id數(shù)據(jù)保存到ThreadLocal對象中,在進行公共字段填充時,再將id從ThreadLocal對象中取出即可。

我將ThreadLocal配置成了一個Bean來管理(也可以用一個工具類來封裝ThreadLocal,定義一個類變量)

ThreadLocal的Bean配置:

@Configuration
public class ThreadLocalConfig {
    @Bean
    public ThreadLocal<Long> threadLocal(){
        ThreadLocal<Long> threadLocal = new ThreadLocal<>();
        return threadLocal;
    }
}

攔截器注入ThreadLocal,并將id存入ThreadLocal:

public class MyInterceptor implements HandlerInterceptor {

    @Autowired
    ThreadLocal<Long> threadLocal;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        log.info("線程id:{}", Thread.currentThread().getId());
        threadLocal.set((Long) request.getSession().getAttribute("employeeId"));
        ...
        對session進行判斷的代碼
        ...
    }
}

之后,在MetaObjectHandler實現(xiàn)類中也對ThreadLocal的Bean進行注入

2. 實體類中公共字段添加注解

    @TableField(fill = FieldFill.INSERT)     // 插入時填充字段
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)    // 插入和更新時填充字段
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)    // 插入時填充字段
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)    // 插入和更新時填充字段
    private Long updateUser;

如此,便實現(xiàn)了公共字段的自動填充

到此這篇關于SpringBoot基于MyBatisPlus實現(xiàn)公共字段自動填充的文章就介紹到這了,更多相關SpringBoot MyBatisPlus公共字段自動填充內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Java實現(xiàn)裁剪和壓縮PPT中的圖片

    使用Java實現(xiàn)裁剪和壓縮PPT中的圖片

    在工作中,PPT演示文稿廣泛應用于報告、課程內容展示以及項目計劃,然而,當?PPT?文件中包含大量圖片時,文件大小常常大幅增加,導致加載緩慢、分享困難等問題,因此在這篇文章中,我們將詳細介紹如何使用Java實現(xiàn)裁剪和壓縮PPT中的圖片,需要的朋友可以參考下
    2026-03-03
  • springmvc請求參數(shù)的綁定的項目實踐

    springmvc請求參數(shù)的綁定的項目實踐

    本文主要介紹了springmvc請求參數(shù)的綁定的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • 單例Bean注入多例Bean屬性失效問題的四種解決方案

    單例Bean注入多例Bean屬性失效問題的四種解決方案

    在實際的開發(fā)過程中,我們有可能會遇到這樣一個場景:多例對象 A 需要作為屬性注入給單例對象 B,但是我們每次獲取 B 的時候,發(fā)現(xiàn)注入的 A 每次都是同一個,并不是多例的,所以本文給大家介紹了如何解決單例Bean注入多例Bean屬性失效問題,需要的朋友可以參考下
    2024-05-05
  • 使用GraalVM如何將SpringBoot項目打包成exe

    使用GraalVM如何將SpringBoot項目打包成exe

    本文介紹了如何使用GraalVM和Maven將Spring Boot項目打包成可執(zhí)行文件的步驟,并詳細解釋了在打包過程中遇到的常見錯誤及其解決方法
    2024-12-12
  • 詳解Java中的敏感信息處理

    詳解Java中的敏感信息處理

    平時開發(fā)中常常會遇到像用戶的手機號、姓名、身份證等敏感信息需要處理,這篇文章主要為大家整理了一些常用的方法,希望對大家有所幫助
    2025-01-01
  • Spring Boot 實現(xiàn)https ssl免密登錄(X.509 pki登錄)

    Spring Boot 實現(xiàn)https ssl免密登錄(X.509 pki登錄)

    這篇文章主要介紹了Spring Boot 實現(xiàn)https ssl免密登錄(X.509 pki登錄),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 詳解Java如何優(yōu)雅的實現(xiàn)異常捕獲

    詳解Java如何優(yōu)雅的實現(xiàn)異常捕獲

    在一個優(yōu)秀的項目中一定少不了對程序流程良好的異常捕獲與日志打印,所以本文主要為大家介紹了如何優(yōu)雅的實現(xiàn)異常捕獲與日志打印輸出,有需要的可以參考下
    2023-09-09
  • 詳解SpringBoot中@PostMapping注解的用法

    詳解SpringBoot中@PostMapping注解的用法

    在SpringBoot中,我們經(jīng)常需要編寫RESTful Web服務,以便于客戶端與服務器之間的通信,@PostMapping注解可以讓我們更方便地編寫POST請求處理方法,在本文中,我們將介紹@PostMapping注解的作用、原理,以及如何在SpringBoot應用程序中使用它
    2023-06-06
  • SpringBoot項目打jar包與war包的詳細步驟

    SpringBoot項目打jar包與war包的詳細步驟

    SpringBoot和我們之前學習的web應用程序不一樣,其本質上是一個 Java應用程序,那么又如何部署呢?這篇文章主要給大家介紹了關于SpringBoot項目打jar包與war包的詳細步驟,需要的朋友可以參考下
    2023-02-02
  • Java垃圾回收算法及GC觸發(fā)條件解讀

    Java垃圾回收算法及GC觸發(fā)條件解讀

    Java垃圾回收機制自動管理內存,減輕開發(fā)負擔但存在性能開銷與延遲問題,主流算法包括標記清除、復制、分代回收等,通過分代策略提升效率,觸發(fā)條件涉及新生代與老年代,優(yōu)化需調參、對象復用及減少臨時對象,未來趨勢為低延遲、大內存支持及智能化GC技術
    2025-07-07

最新評論

高碑店市| 日照市| 昭平县| 灵台县| 花莲市| 固安县| 齐河县| 贡嘎县| 永登县| 通许县| 宽城| 广州市| 精河县| 通城县| 文安县| 霍州市| 永泰县| 温州市| 涿鹿县| 馆陶县| 志丹县| 安化县| 扎囊县| 江永县| 淮滨县| 孝昌县| 霍林郭勒市| 黔江区| 颍上县| 邢台市| 伊川县| 彝良县| 巴青县| 大同县| 若尔盖县| 长垣县| 新源县| 宜春市| 仙游县| 米脂县| 甘泉县|