Mybatis框架啟動(dòng)流程分析

近期準(zhǔn)備做一下Mybatis的源碼解讀徒坡,整個(gè)系列大概會(huì)有6-7篇文章喇完。

先釋放一下目錄:
1.Mybatis框架組件設(shè)計(jì)&頂層接口

2.Mybatis框架啟動(dòng)流程分析

3.Mybatis框架源碼Configuration分析
4.Mybatis框架一條插入語句的執(zhí)行流程
5.Mybatis框架從源碼角度來講執(zhí)行增,刪,改的時(shí)候如何保證線程安全?
6.Mybatis框架一條查詢語句的執(zhí)行流程
7.Mybatis的日志&異常體系
8.Mybatis與Spring集成過程
9.Mybatis的CRUD代碼生成

寫這篇文章的目的一方面是面試問的頻率比較高,也比較難则涯。另一方面也是對Mybatis的啟動(dòng)流程比較感興趣,希望知道啟動(dòng)過程中的不同階段做了什么事浮入,如何組織數(shù)據(jù)結(jié)構(gòu)事秀。
這里我閱讀的是Mybatis3的一些源碼,同時(shí)會(huì)通過test目錄里的test-case做一些debug睹欲。閱讀源碼的效率,理解源碼內(nèi)容上會(huì)好很多闸衫。

先放一張流程圖說明Mybatis啟動(dòng)過程:


mybatisStartInit.png

Mybatis的啟動(dòng)過程有兩條線,一條明線稀余,一條暗線:
明線:簡單看Mybatis的啟動(dòng)過程是在通過一些工廠創(chuàng)建SqlSession對象,解析配置文件掸掏。
暗線:實(shí)際上是在初始化Configuration.看源碼可以知道Configuration在很多地方都被依賴了。但是呢卻不怎么了解Configuration在Mybatis中的定位愿待。這個(gè)會(huì)在第三篇文章中專門對Configuration類做解析介紹。
下面我們通過debug看一下Mybatis的整體啟動(dòng)初始化過程。
我們重點(diǎn)跟蹤一下Mybatis源碼中的test case中的:org.apache.ibatis.session.SqlSessionManagerTest#setup()方法
先以debug方式啟動(dòng):org.apache.ibatis.session.SqlSessionManagerTest#shouldCommitInsertedAuthor()方法


debug源碼啟動(dòng)開始.png
準(zhǔn)備解析xml初始化Configuration對象.png

這里有個(gè)隱含的問題就是說是初始化Configuration對象囱挑,但是從哪初始化的呢游添,從哪去解析的呢?可以看一下XMLConfigBuilder的構(gòu)造方法和其父類的構(gòu)造方法,如下圖:


子類構(gòu)造方法.png
父類構(gòu)造方法.png

上面幾步我們已經(jīng)創(chuàng)建了Configuration對象嗡贺,并且一些屬性有了默認(rèn)值煞茫,如下圖:


Configuration初始化.png

下面我們繼續(xù)debug,看org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration()方法


解析mybatis配置文件初始化Configuration的屬性值.png

這個(gè)方法執(zhí)行結(jié)束整個(gè)初始化Configuration對象的過程也就結(jié)束了,后面會(huì)通過這個(gè)初始化好的Configuration再創(chuàng)建SqlSessionManager,SqlSessionFactory對象等客情。
我們繼續(xù)跟其中一個(gè)方法如:org.apache.ibatis.builder.xml.XMLConfigBuilder#mapperElement
解析xxDAOMapper的入口.png

這里繼續(xù)深入一些看這個(gè)方法:org.apache.ibatis.builder.xml.XMLMapperBuilder#parameterMapElement()


QQ截圖20200704233345.png

解析xxDAOMapper.xml的過程比較隱蔽,因?yàn)槭侵饘咏馕龅模虼瞬粫?huì)明顯的去解析某文件夾下的某xml文件项鬼。解析過程的起點(diǎn)是mybatis的配置文件mapperconfig.xml.
整個(gè)解析過程結(jié)束后我們簡單看一下sqlSessionManager的創(chuàng)建過程。


創(chuàng)建sqlsession相關(guān)的邏輯.png

到這里我們通過debug的方式將整個(gè)mybatis的啟動(dòng)過程梳理了一遍沦零,由于初始化過程涉及到很多具體的處理細(xì)節(jié)疾渴,這里不再展開,讀者可以將mybatis的代碼down下來屯仗,本地直接跑test-case,然后debug具體看某一方面的實(shí)現(xiàn)細(xì)節(jié)搞坝,相信一定能收獲很多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魁袜,一起剝皮案震驚了整個(gè)濱河市桩撮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌峰弹,老刑警劉巖店量,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鞠呈,居然都是意外死亡融师,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蚁吝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诬滩,“玉大人,你說我怎么就攤上這事灭将√勰瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵庙曙,是天一觀的道長空镜。 經(jīng)常有香客問我,道長捌朴,這世上最難降的妖魔是什么吴攒? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮砂蔽,結(jié)果婚禮上洼怔,老公的妹妹穿的比我還像新娘。我一直安慰自己左驾,他們只是感情好镣隶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诡右,像睡著了一般安岂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帆吻,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天域那,我揣著相機(jī)與錄音,去河邊找鬼猜煮。 笑死次员,一個(gè)胖子當(dāng)著我的面吹牛败许,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淑蔚,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼市殷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了束倍?” 一聲冷哼從身側(cè)響起被丧,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤盟戏,失蹤者是張志新(化名)和其女友劉穎绪妹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柿究,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邮旷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝇摸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婶肩。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖貌夕,靈堂內(nèi)的尸體忽然破棺而出律歼,到底是詐尸還是另有隱情,我是刑警寧澤啡专,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布险毁,位于F島的核電站,受9級(jí)特大地震影響们童,放射性物質(zhì)發(fā)生泄漏畔况。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一慧库、第九天 我趴在偏房一處隱蔽的房頂上張望跷跪。 院中可真熱鬧,春花似錦齐板、人聲如沸吵瞻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽听皿。三九已至,卻和暖如春宽档,著一層夾襖步出監(jiān)牢的瞬間尉姨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工吗冤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留又厉,地道東北人九府。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像覆致,于是被迫代替她去往敵國和親侄旬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355