Mybatis SQL運行流程源碼詳解
概述
源碼就是能夠被用來執(zhí)行,生成機器能夠識別的代碼,通過開源源碼,可以引用其功能。
重要性
1、mybatis中的sql執(zhí)行,不僅要知道返回的結(jié)果是什么,還需要知道這結(jié)果是怎么來的,經(jīng)過了怎樣的處理,只有知道了這樣的原理,碰到問題才能更好的知道問題出在那個環(huán)節(jié)。
2、能更好的擴展應(yīng)用程序,可以做到代碼的復(fù)用,減少開發(fā)成本和時間。
3、學(xué)習其中的設(shè)計思想能夠在其他應(yīng)用得已應(yīng)用。
步驟
源碼閱讀,可以從測試用例著手,每個源碼,多有大師們寫的測試用例,咱們可以用大師們寫的測試用例進行相關(guān)功能的測試,這樣就可以知道其中的運行原理及一些設(shè)計思想。
步驟1 測試用例請求

步驟2 進行MapperProxy對象,MapperProxy代理是jdk動態(tài)代理,根據(jù)傳入的mapper接口,動態(tài)生成代理對象,代理對象同時實現(xiàn)了InvocationHandler接口。



步驟3:進行到MapperMethod類,通過構(gòu)造器初始化SqlCommand靜態(tài)內(nèi)部類,跟配置文件的方法簽名對比,是不是有對應(yīng)的方法。

步驟4 進行execute選擇執(zhí)行的Sqlsession


步驟5 進入DefaultSqlsession,選擇執(zhí)行的執(zhí)行器,先選擇緩存執(zhí)行器,緩存沒有選擇默認的簡單執(zhí)行器,如果mybatis有配置,就選擇配置的執(zhí)行器,并設(shè)置預(yù)處理參數(shù)。


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

流程的請求總結(jié)

總結(jié)
1、mybatis使用了jdk的動態(tài)代理,在程序執(zhí)行的時候生成一個具體的代理對象,執(zhí)行相關(guān)的邏輯,可以在代理的方法前后執(zhí)行一些邏輯,不用改變原來類的邏輯,就能增強類方法的功能,在編寫底層代碼的時候動態(tài)代理尤其重要;
2、應(yīng)用廣泛比如事物的管理、spring aop的原理實現(xiàn),登錄權(quán)限攔截、日志的統(tǒng)一輸出、統(tǒng)計每個 api 的請求耗時等等。
3、研究源碼并不是為了研究而研究,要學(xué)習其中的思想,比如動態(tài)代理、工廠模式、建造者模式,要利用這些原則來增加程序的可維護性、復(fù)用性、靈活性、可靠性。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
同時使用@LoadBalanced?@RefreshScope注解負載均衡失效分析
這篇文章主要為大家介紹了同時使用@LoadBalanced?@RefreshScope負載均衡失效問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
Springboot2以代碼的方式統(tǒng)一配置Jackson教程
這篇文章主要介紹了Springboot2以代碼的方式統(tǒng)一配置Jackson教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
在SpringBoot下讀取自定義properties配置文件的方法
這篇文章主要介紹了在SpringBoot下讀取自定義properties配置文件的方法,文中涉及到了Spring-boot中讀取config配置文件的兩種方式,需要的朋友可以參考下2017-12-12
SpringBoot頂層接口實現(xiàn)類注入項目的方法示例
本文主要介紹了SpringBoot頂層接口實現(xiàn)類注入項目的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2024-06-06
Java實現(xiàn)讀取resources目錄下的文件路徑的九種方式
本文主要介紹了Java實現(xiàn)讀取resources目錄下的文件路徑的九種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2022-04-04
SpringData JPA實現(xiàn)查詢分頁demo
本篇文章主要介紹了SpringData JPA實現(xiàn)查詢分頁demo,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
Java for循環(huán)和foreach循環(huán)的性能對比分析
這篇文章主要介紹了Java for循環(huán)和foreach循環(huán)的性能對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

