Mybatis的SQL執行流程源碼剖析

Mybatis的SQL執行流程源碼剖析

概述

源碼就是可以被用來執行,生成機器可以識別的代碼,經過開源源碼,能夠引用其功能。spring

重要性

一、mybatis中的sql執行,不緊要知道返回的結果是什麼,還須要知道這結果是怎麼來的,通過了怎樣的處理,只有知道了這樣的原理,碰到問題才能更好的知道問題出在那個環節。
二、能更好的擴展應用程序,能夠作到代碼的複用,減小開發成本和時間。
三、學習其中的設計思想可以在其餘應用得已應用。sql

步驟

源碼閱讀,能夠從測試用例着手,每一個源碼,多有大師們寫的測試用例,我們能夠用大師們寫的測試用例進行先關功能的測試,這樣就能夠知道其中的運行原理及一些設計思想。api

步驟1 測試用例請求

Mybatis的SQL執行流程源碼剖析

步驟2 進行MapperProxy對象,MapperProxy代理是jdk動態代理,根據傳入的mapper接口,動態生成代理對象,代理對象同時實現了InvocationHandler接口。

Mybatis的SQL執行流程源碼剖析

Mybatis的SQL執行流程源碼剖析

Mybatis的SQL執行流程源碼剖析

步驟3:進行到MapperMethod類,經過構造器初始化SqlCommand靜態內部類,跟配置文件的方法簽名對比,是否是有對應的方法。

Mybatis的SQL執行流程源碼剖析

步驟4 進行execute選擇執行的Sqlsession

Mybatis的SQL執行流程源碼剖析
Mybatis的SQL執行流程源碼剖析

步驟5 進入DefaultSqlsession,選擇執行的執行器,先選擇緩存執行器,緩存沒有選擇默認的簡單執行器,若是mybatis有配置,就選擇配置的執行器,並設置預處理參數。

Mybatis的SQL執行流程源碼剖析
Mybatis的SQL執行流程源碼剖析

步驟6 進入申明處理對象進行查詢,返回結果集

Mybatis的SQL執行流程源碼剖析

流程的請求能夠總結爲:測試用例請求-》MapperPrxoy(invoker)-》MapperMthod(execute)-》Sqlsession(executor.query())-》SimpleExecutor(MappedStatement.doQuery())-》StatementHandler(PreparedStatementHandler)-》ResultsetHandler->返回結果集

-》結束緩存

總結

一、mybatis使用了jdk的動態代理,在程序執行的時候生成一個具體的代理對象,執行相關的邏輯,能夠在代理的方法先後執行一些邏輯,不用改變原來類的邏輯,就能加強類方法的功能,在編寫底層代碼的時候動態代理尤爲重要;
二、應用普遍好比事物的管理、spring aop的原理實現,登陸權限攔截、日誌的統一輸出、統計每一個 api 的請求耗時等等。
三、研究源碼並非爲了研究而研究,要學習其中的思想,好比動態代理、工廠模式、建造者模式,要利用這些原則來增長程序的可維護性、複用性、靈活性、可靠性。session

相關文章
相關標籤/搜索