Mybatis SQL運(yùn)行流程源碼詳解
概述
源碼就是能夠被用來(lái)執(zhí)行,生成機(jī)器能夠識(shí)別的代碼,通過(guò)開(kāi)源源碼,可以引用其功能。
重要性
1、mybatis中的sql執(zhí)行,不僅要知道返回的結(jié)果是什么,還需要知道這結(jié)果是怎么來(lái)的,經(jīng)過(guò)了怎樣的處理,只有知道了這樣的原理,碰到問(wèn)題才能更好的知道問(wèn)題出在那個(gè)環(huán)節(jié)。
2、能更好的擴(kuò)展應(yīng)用程序,可以做到代碼的復(fù)用,減少開(kāi)發(fā)成本和時(shí)間。
3、學(xué)習(xí)其中的設(shè)計(jì)思想能夠在其他應(yīng)用得已應(yīng)用。
步驟
源碼閱讀,可以從測(cè)試用例著手,每個(gè)源碼,多有大師們寫(xiě)的測(cè)試用例,咱們可以用大師們寫(xiě)的測(cè)試用例進(jìn)行相關(guān)功能的測(cè)試,這樣就可以知道其中的運(yùn)行原理及一些設(shè)計(jì)思想。
步驟1 測(cè)試用例請(qǐng)求
步驟2 進(jìn)行MapperProxy對(duì)象,MapperProxy代理是jdk動(dòng)態(tài)代理,根據(jù)傳入的mapper接口,動(dòng)態(tài)生成代理對(duì)象,代理對(duì)象同時(shí)實(shí)現(xiàn)了InvocationHandler接口。
步驟3:進(jìn)行到MapperMethod類(lèi),通過(guò)構(gòu)造器初始化SqlCommand靜態(tài)內(nèi)部類(lèi),跟配置文件的方法簽名對(duì)比,是不是有對(duì)應(yīng)的方法。
步驟4 進(jìn)行execute選擇執(zhí)行的Sqlsession
步驟5 進(jìn)入DefaultSqlsession,選擇執(zhí)行的執(zhí)行器,先選擇緩存執(zhí)行器,緩存沒(méi)有選擇默認(rèn)的簡(jiǎn)單執(zhí)行器,如果mybatis有配置,就選擇配置的執(zhí)行器,并設(shè)置預(yù)處理參數(shù)。
步驟6 進(jìn)入申明處理對(duì)象進(jìn)行查詢(xún),返回結(jié)果集
流程的請(qǐng)求總結(jié)
總結(jié)
1、mybatis使用了jdk的動(dòng)態(tài)代理,在程序執(zhí)行的時(shí)候生成一個(gè)具體的代理對(duì)象,執(zhí)行相關(guān)的邏輯,可以在代理的方法前后執(zhí)行一些邏輯,不用改變?cè)瓉?lái)類(lèi)的邏輯,就能增強(qiáng)類(lèi)方法的功能,在編寫(xiě)底層代碼的時(shí)候動(dòng)態(tài)代理尤其重要;
2、應(yīng)用廣泛比如事物的管理、spring aop的原理實(shí)現(xiàn),登錄權(quán)限攔截、日志的統(tǒng)一輸出、統(tǒng)計(jì)每個(gè) api 的請(qǐng)求耗時(shí)等等。
3、研究源碼并不是為了研究而研究,要學(xué)習(xí)其中的思想,比如動(dòng)態(tài)代理、工廠模式、建造者模式,要利用這些原則來(lái)增加程序的可維護(hù)性、復(fù)用性、靈活性、可靠性。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解mysql DML語(yǔ)句的使用2. Oracle Optimizer:遷移到使用基于成本的優(yōu)化器-----系列1.23. Mysql入門(mén)系列:對(duì)MYSQL查詢(xún)中有疑問(wèn)的數(shù)據(jù)進(jìn)行編碼4. 如何:創(chuàng)建和運(yùn)行 CLR SQL Server 用戶(hù)定義的函數(shù)5. mysql 視圖操作和存儲(chǔ)過(guò)程6. DB2編程序小小技巧7. Oracle 中檢查臨時(shí)表空間的方法8. 上海Oracle OpenWorld大會(huì)紀(jì)事-07.199. MySQL分區(qū)的優(yōu)點(diǎn)10. SQL Server數(shù)據(jù)庫(kù)備份和恢復(fù)數(shù)據(jù)庫(kù)的全過(guò)程
