亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)填充 填充當前登錄的用戶的 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進行設(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)文章

  • MyBatis insert標簽及常用屬性詳解

    MyBatis insert標簽及常用屬性詳解

    這篇文章主要介紹了MyBatis insert標簽,insert 標簽中沒有 resultType 屬性,只有查詢操作才需要對返回結(jié)果類型進行相應(yīng)的指定,需要的朋友可以參考下
    2023-10-10
  • SpringBoot中使用多線程的方法示例

    SpringBoot中使用多線程的方法示例

    這篇文章主要介紹了SpringBoot中使用多線程的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Java稀疏數(shù)組詳細圖文教程

    Java稀疏數(shù)組詳細圖文教程

    當一個數(shù)組中的大部分元素為相同的值,可使用稀疏數(shù)組來保存該數(shù)組,可以將稀疏數(shù)組看做是普通數(shù)組的壓縮,這篇文章主要給大家介紹了關(guān)于Java稀疏數(shù)組的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • 解決IDEA報錯Failed?to?start?bean‘documentationPluginsBootstrapper‘問題

    解決IDEA報錯Failed?to?start?bean‘documentationPluginsBootstra

    這篇文章主要介紹了解決IDEA報錯Failed?to?start?bean‘documentationPluginsBootstrapper‘問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java學習筆記之eclipse+tomcat 配置

    java學習筆記之eclipse+tomcat 配置

    俗話說:工欲善其事必先利其器,既然要學習java,首先把java的開發(fā)環(huán)境搗鼓一下吧,這里我們來談?wù)別clipse+tomcat的配置方法。
    2014-11-11
  • springboot創(chuàng)建監(jiān)聽和處理事件的操作方法

    springboot創(chuàng)建監(jiān)聽和處理事件的操作方法

    這篇文章主要介紹了springboot創(chuàng)建監(jiān)聽和處理事件的操作方法,使用Spring Boot的事件機制來監(jiān)聽和處理事件有多種優(yōu)勢,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2024-07-07
  • 最新評論