1. 程式人生 > 其它 >9、Arrays.sort 實現原理和 Collection 實現原理

9、Arrays.sort 實現原理和 Collection 實現原理

Mybatis執行原理

先是簡要的文字說明,後面放上圖。

一、根據配置檔案建立SQLSessionFactory

首先將配置檔案轉化為流,建立SqlSessionFactoryBuilder物件,通過SqlSessionFactoryBuilder的build() 方法對流進行建立SQLSessionFactory的例項。

build() 的簡易過程為:建立解析器parser對流進行配置檔案中的每個標籤進行解析,將解析後的結果儲存在Configration中,最後通過build()返回一個DefaultSqlSession物件,即SQLSessionFactory的例項。

二、返回SqlSession的實現類DefaultSqlSession物件

在第一步獲取到包含了Configration的DefaultSqlSession物件後,呼叫它的openSession() 方法,實際上是呼叫openSessionFromDataSource() 方法,在這個方法中獲取環境資訊,建立事務並使用newExecutor()獲得executor物件。最後創建出包含Configration和executor的DefaultSqlSession物件。

newExecutor()的簡易過程:首先根據全域性配置創建出SimpleExecutor/ReuseExecutor/BatchExecutor中的一種(對executor進行包裝)。然後如果開啟了二級快取則建立CachingExecutor(對executor進行包裝)。最後使用每一種攔截器對executor進行包裝並返回。

三、getMapper()返回介面的代理物件

SqlSession.getMapper()--->Configuration.getMapper()--->mapperRegistry.getMapper()。然後根據介面型別獲得MapperProxyFactory。再通過mapperProxyFactory.newInstance(sqlSession)建立MapperProxy。而MapperProxy是實現了InvocationHandler介面,所以MapperProxy是一個代理物件。最後層層返回得到代理物件。

四、通過代理物件呼叫增刪改查方法

這一步比較麻煩,簡易說明一下:代理物件通過invoke()方法判斷使用者是用增刪改查的哪個方法,然後再呼叫sqlSession的增刪改查方法。

在呼叫sqlSession的增刪改查方法中會呼叫executor對應的增刪改查方法獲取到BoundSql,BoundSql裡包含了sql語句的詳細資訊。executor再建立StatementHandler,在建立StatementHandler的同時也建立了ParameterHandler與ResultSetHandler。StatementHandler通過ParameterHandler設定引數、通過ResultSetHandler處理結果。而ParameterHandler和ResultSetHandler都依賴於TypeHandler進行資料庫型別和JavaBean型別的對映。TypeHandler的底層使用的是JDBC。


一、根據配置檔案建立SQLSessionFactory

二、返回SqlSession的實現類DefaultSqlSession物件

三、getMapper()返回介面的代理物件

四、通過代理物件呼叫增刪改查方法

以上圖片轉載自尚矽谷