6. interceptorChain

mybatis 的interceptorChain是給擴展用的, 常用的比如分頁擴展插件. mybatis提供的rowbounds實質(zhì)上是采用 fetchSize, rs.next 這種方式. 其性能很差. (實際上就是游標(biāo), .next() 一點點向下滾動)

其采用了反射,一個典型的Interceptor

@Intercepts({
        @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class,
                RowBounds.class, ResultHandler.class }),
        @Signature(type = Executor.class, method = "close", args = { boolean.class }) })
public class MyBatisInterceptor implements Interceptor {

    private Integer value;

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        //do something
        
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        //do something
    }

}

比如分頁插件可以通過增強以下接口實現(xiàn)

public interface StatementHandler {
    <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException;

    BoundSql getBoundSql();
}

詳情請參見分頁插件源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近在看OkHttp源碼時,看到了Interceptor的使用,覺得還是很巧妙的設(shè)計,所以就提煉出來,已被不時之需...
    Rocky1982閱讀 2,613評論 2 5
  • 轉(zhuǎn)載自:https://www.cnblogs.com/easypass/archive/2010/12/08/1...
    SkTj閱讀 623評論 0 1
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,241評論 0 4
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,012評論 0 11
  • 《獻(xiàn)給命運的紫羅蘭》是劉心武先生寫的一本散文集,里面還收錄了他的兩冊散文《人生非夢總難醒》和《獻(xiàn)給命運的紫羅蘭》,...
    維綺微雨閱讀 944評論 0 4

友情鏈接更多精彩內(nèi)容