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

mybatis攔截器及不生效的解決方法

 更新時(shí)間:2023年04月07日 10:30:41   作者:aaacarrot  
本文主要介紹了mybatis攔截器及不生效的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

背景:

在一些需求下,使用攔截器會(huì)大大簡(jiǎn)化工作量也更加靈活:

  • 在項(xiàng)目中,要更新數(shù)據(jù)表的審計(jì)字段,比如 create_time, creator, update_time, updator, 這些字段,如果每一個(gè)表對(duì)應(yīng)的mapper 都去寫一次,或每一個(gè)方法都去更新一下,這個(gè)工作量非常大并且不太友好,并且不夠優(yōu)雅。
  • 記錄一些日志,比如執(zhí)行sql時(shí)侯,要打印每一個(gè)sql執(zhí)行了多久,那就要記錄sql執(zhí)行前的時(shí)間戳,執(zhí)行后的時(shí)間戳,得到其執(zhí)行時(shí)間,再打印。
  • 等等場(chǎng)景

在這些場(chǎng)景下,使用攔截器肯定會(huì)更加靈活且方法。

mybatis攔截器怎樣做

  • 定義一個(gè)攔截器
  • 把這個(gè)攔截器交給spring容器管理
  • 如果項(xiàng)目里面使用了 com.github.pagehelper.PageInterceptor 攔截器可能會(huì)無效,則需要再定義一個(gè) MybatisInterceptorAutoConfiguration

根據(jù)以上三點(diǎn),進(jìn)行詳細(xì)說明

定義一個(gè)攔截器

簡(jiǎn)單示意一下怎樣寫。。。具體業(yè)務(wù)肯定不止這樣子的

一個(gè)攔截器,主要是實(shí)現(xiàn) Interceptor 這個(gè)接口,實(shí)現(xiàn)這個(gè)接口下的三個(gè)方法。
然后在這個(gè)實(shí)現(xiàn)類加上 @Component 注解,就交給 spring容器管理了,所以1,2是一起的

import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Component;
 
import java.util.Properties;
 
import lombok.extern.slf4j.Slf4j;
 
@Slf4j
@Component
@Intercepts({
        @Signature(
                method = "query",
                type = Executor.class,
                args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
        ),
        @Signature(
                method = "query",
                type = Executor.class,
                args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}
        ),
        @Signature(
                type = Executor.class,
                method = "update",
                args = {MappedStatement.class, Object.class}
        )
})
public class LogInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        log.info("begin >>>>>>>>>");
        Object rest = invocation.proceed();
        log.info("end >>>>>>>>>");
        return rest;
    }
 
    @Override
    public Object plugin(Object o) {
        return Plugin.wrap(o, this);
    }
 
    @Override
    public void setProperties(Properties properties) {
 
    }
}

定義一個(gè) MybatisInterceptorAutoConfiguration

為什么要有這么一個(gè)類呢,主要是因?yàn)槿绻愕哪K里面引用了 com.github.pagehelper.PageInterceptor,你自定義的攔截器會(huì)無效,是因?yàn)閙ybatis的攔截器這就是一個(gè)責(zé)任鏈,但是如果執(zhí)行了 PageInterceptor,這個(gè)Interceptor比較特別,它自己執(zhí)行完,就不往下傳遞鏈條了,即這個(gè)鏈會(huì)在它這里斷開。所以加了其它的interceptor, 它們必須在 PageInterceptor 之前執(zhí)行。

具體可見代碼:

import com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration;
 
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Configuration;
 
 
@Configuration
// 這一行很重要,因?yàn)閕nterceptor 鏈的執(zhí)行與添加是反序的,所以在 PageHelperAutoConfiguration 之后添加,才能先執(zhí)行。
@AutoConfigureAfter(PageHelperAutoConfiguration.class)
public class MybatisInterceptorAutoConfiguration {
 
    @Autowired
    private List<SqlSessionFactory> sqlSessionFactoryList;
 
    @PostConstruct
    public void addMyInterceptor() {
        LogInterceptor e = new LogInterceptor();
        for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
            sqlSessionFactory.getConfiguration().addInterceptor(e);
        }
    }
}

附錄幾個(gè)參考的博文:

Mybatis攔截器
PageHelper導(dǎo)致自定義Mybatis攔截器不生效
Mybatis攔截器失效

到此這篇關(guān)于mybatis攔截器及不生效的解決方法的文章就介紹到這了,更多相關(guān)mybatis攔截器及不生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中@Autowired生效方式詳解

    SpringBoot中@Autowired生效方式詳解

    @Autowired注解可以用在類屬性,構(gòu)造函數(shù),setter方法和函數(shù)參數(shù)上,該注解可以準(zhǔn)確地控制bean在何處如何自動(dòng)裝配的過程。在默認(rèn)情況下,該注解是類型驅(qū)動(dòng)的注入
    2022-06-06
  • java生成隨機(jī)圖片驗(yàn)證碼

    java生成隨機(jī)圖片驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了java生成隨機(jī)圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • SpringBoot實(shí)現(xiàn)License認(rèn)證(只校驗(yàn)有效期)的詳細(xì)過程

    SpringBoot實(shí)現(xiàn)License認(rèn)證(只校驗(yàn)有效期)的詳細(xì)過程

    License也就是版權(quán)許可證書,一般用于收費(fèi)軟件給付費(fèi)用戶提供的訪問許可證明,這篇文章主要介紹了SpringBoot實(shí)現(xiàn)License認(rèn)證(只校驗(yàn)有效期),需要的朋友可以參考下
    2024-04-04
  • Spring IOC原理補(bǔ)充說明(循環(huán)依賴、Bean作用域等)

    Spring IOC原理補(bǔ)充說明(循環(huán)依賴、Bean作用域等)

    這篇文章主要介紹了Spring IOC原理補(bǔ)充說明(循環(huán)依賴、Bean作用域等),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字游戲

    java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字游戲

    這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Spring中的@AutoWired與@Resource及@Qualifier注解詳解

    Spring中的@AutoWired與@Resource及@Qualifier注解詳解

    這篇文章主要介紹了Spring中的@AutoWired與@Resource及@Qualifier注解詳解,spring不但支持自己定義的@Autowired注解,所以Autowired與Spring是強(qiáng)相關(guān)性,只能在spring框架中使用,而后幾個(gè)注解則不然,需要的朋友可以參考下
    2023-11-11
  • java集合_淺談Iterable和Iterator的區(qū)別

    java集合_淺談Iterable和Iterator的區(qū)別

    下面小編就為大家?guī)硪黄猨ava集合_淺談Iterable和Iterator的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • Java集合之LinkedList源碼解析

    Java集合之LinkedList源碼解析

    這篇文章主要介紹了Java集合之LinkedList源碼解析,LinkedList和ArrayList數(shù)據(jù)結(jié)構(gòu)是完全不一樣的,ArrayList 底層是數(shù)組的結(jié)構(gòu),而 LinkedList 的底層則是鏈表的結(jié)構(gòu), 它可以進(jìn)行高效的插入和移除的操作,它基于的是一個(gè)雙向鏈表的結(jié)構(gòu),需要的朋友可以參考下
    2023-12-12
  • Java中InetAddress類的使用

    Java中InetAddress類的使用

    InetAddress類是Java中用于表示IP地址的類,本文就來介紹一下Java中InetAddress類的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的解決方法

    IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java

    這篇文章主要為大家介紹了解決IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08

最新評(píng)論

金华市| 罗田县| 山阴县| 七台河市| 阿巴嘎旗| 栖霞市| 措美县| 灵武市| 涡阳县| 阿坝县| 桐柏县| 宁津县| 宝山区| 襄汾县| 莎车县| 西昌市| 宜阳县| 松江区| 门头沟区| 旬邑县| 康马县| 常宁市| 盐池县| 清远市| 镇沅| 商丘市| 社会| 灵川县| 庄河市| 枝江市| 丹阳市| 吴川市| 巴楚县| 南阳市| 马尔康县| 乡城县| 宜兰市| 稻城县| 保亭| 象山县| 武汉市|