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

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

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

問題背景

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

因此,可以創(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 {

之后,重寫相關(guān)方法 (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)填充 填充當(dāng)前登錄的用戶的 ID
        metaObject.setValue("updateUser", threadLocal.get());  // 動態(tài)填充 填充當(dāng)前登錄的用戶的 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進行設(shè)置時(通常是設(shè)置id),無法拿到session,因此不能通過session的方式獲取id。這里使用的是ThreadLocal

需要知道的是,頁面向服務(wù)器發(fā)送的每一個請求,在服務(wù)器端都會有一個獨立的線程根據(jù)該請求進行一系列操作。例如,頁面發(fā)來一個修改用戶的請求,到了服務(wù)器端,攔截器的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)了公共字段的自動填充

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

相關(guān)文章

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

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

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

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

    本文主要介紹了springmvc請求參數(shù)的綁定的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    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í)行文件的步驟,并詳細(xì)解釋了在打包過程中遇到的常見錯誤及其解決方法
    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登錄),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    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服務(wù),以便于客戶端與服務(wù)器之間的通信,@PostMapping注解可以讓我們更方便地編寫POST請求處理方法,在本文中,我們將介紹@PostMapping注解的作用、原理,以及如何在SpringBoot應(yīng)用程序中使用它
    2023-06-06
  • SpringBoot項目打jar包與war包的詳細(xì)步驟

    SpringBoot項目打jar包與war包的詳細(xì)步驟

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

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

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

最新評論

茶陵县| 桃园县| 定南县| 仙桃市| 宁国市| 平乐县| 疏勒县| 清镇市| 枣阳市| 南郑县| 菏泽市| 濮阳市| 赤水市| 大关县| 丰宁| 岫岩| 天水市| 长垣县| 图木舒克市| 巩义市| 义马市| 高碑店市| 屯留县| 香格里拉县| 海门市| 兴海县| 和静县| 桓仁| 张家口市| 乌海市| 黎川县| 张家川| 文登市| 林西县| 澄迈县| 奈曼旗| 富锦市| 额济纳旗| 婺源县| 邵东县| 崇仁县|