Mybatis原始碼分析--Executor原始碼分析(未完待續)
阿新 • • 發佈:2018-12-18
1 概述
Mybatis中所有的Mapper語句的執行都是通過Executor進行的,Executor是Mybatis的一個核心介面。針對Executor的學習,我們先來說說Executor的生成和Executor的分類,然後再來看看其中某個典型方法的具體執行。
2 Executor生成
Executor是通過Configuration的newExecutor函式來生成的,我們來看一看newExecutor的邏輯。
public Executor newExecutor(Transaction transaction, ExecutorType executorType) { //獲取執行器型別,如果沒有就使用SIMPLE executorType = executorType == null ? defaultExecutorType : executorType; executorType = executorType == null ? ExecutorType.SIMPLE : executorType; Executor executor; //根據不同的執行器型別生成不同的執行器 if (ExecutorType.BATCH == executorType) { executor = new BatchExecutor(this, transaction); } else if (ExecutorType.REUSE == executorType) { executor = new ReuseExecutor(this, transaction); } else { executor = new SimpleExecutor(this, transaction); } if (cacheEnabled) { executor = new CachingExecutor(executor); } //外掛處理執行器 executor = (Executor) interceptorChain.pluginAll(executor); return executor; }
從上面的原始碼我們可以看出這裡針對不同的執行器型別來生成不同的執行器,針對外掛處理執行器,這裡使用到了責任鏈模式,後面在分析外掛的時候在具體談。
2 Executor 結構
從上面的Executor的建立我們猜到了Executor僅僅是Mybatis的執行器介面,這裡針對不同的執行器型別會建立不同的執行器物件。我們來看一看執行器型別列舉類。
public enum ExecutorType {
SIMPLE, REUSE, BATCH
}
由上面的執行器型別列舉類,我們直到了Mybatis共有三種執行器。分別的作用如下:
SimpleExecutor -- 執行mapper語句的時候,預設的Executor。 ReuseExecutor -- 針對相同的sql可以重用Statement。 BatchExecutor --用於批量操作。
我們來看一下執行器的類圖: