mybatis的啟動流程(一)-生成SqlSessionFactory

1. 讀取mybatis-config.xml的配置文件

讀取配置文件

2. 構(gòu)建一個SqlSessionFactory對象

創(chuàng)建一個SqlSessionFactory

通過SqlSessionFactoryBuilder來構(gòu)建一個SqlSessionFactory對象

3. ?進入mybatis源碼中細細解析

關(guān)鍵類:

1. SqlSessionFactoryBuilder --> 控制創(chuàng)建SqlSessionFactory的整個流程

2. XMLConfiguration --> 解析xml中的屬性

3. DefaultSqlSessionFactory --> 創(chuàng)建SqlSessionFactory

4. Configuration --> 核心類胎撇,解析后的xml文件后的數(shù)據(jù)幾乎全部都在這里

獲取一個SessionFactory的主要代碼

3.1 通過解析mybatis-config.xml文件來獲取一個XMLConfigBuilder的實例parser

parser中存放的是mybatis-config.xml文件中configuration節(jié)點下的整個xml樹的數(shù)據(jù)鸠蚪。

3.1.1 通過reader構(gòu)造一個XMLConfiguration實例
3.1.2 進入構(gòu)造函數(shù)的準備工作
3.1.3 實際上的構(gòu)造函數(shù)

3.2 通過parser.parse()方法來把這個xml樹的數(shù)據(jù)提取到Configuration的實例中。

configguration的實例在mybatis框架中是一個單例的涛癌,是框架中的核心類,畢竟很多東西都要從Configuration中獲取碉输。

3.2.1 判斷文件是否重復解析
3.2.2 將文件中的配置讀取到Configuration的實例中

3.3 創(chuàng)建一個SqlSessionFactory實例

終于把mybatis-config.xml和眾多的sql的映射文件解析好了之后架曹,并將對應(yīng)的屬性也全部都設(shè)置到Configuration中,拿到了Configuration的實例互例,然后可以去構(gòu)造一個SqlSessionFactory實例了。

3.3.1 默認構(gòu)建一個DefautlSqlSessionFactory實例
3.3.2 通過Configuration的實例來構(gòu)建

總結(jié)姓迅,這樣子就完成了一個SqlSessionFactory實例的創(chuàng)建敲霍。

備注

這時候俊马,我們來看看Configuration中一些關(guān)鍵變量值是什么

1. 1 mappedStatements是一個StrictMap(mybatis自己在HashMap上封裝的)丁存。

這個map的key有兩種形式:?

1.1.1 ?映射文件中namescape+id ?--> 全局唯一肩杈,不唯一程序直接炸錯

1.1.2 取1.1 中得到最后一個句點(.)后的單詞(StrictMap中叫做shortname) --> 短名字可能會重復,程序無所謂解寝,繼續(xù)跑

因此這個map的value也有兩種形式:

1.2.1 如果可以保證1.1.1 和 1.1.2 的規(guī)則都是全局唯一的扩然,那么value就是MappedStatement的實例。

1.2.2 如果1.1.2 沒有辦法保證是全局唯一的聋伦,那么這個短名字為key對應(yīng)的value是Ambiguity的實例夫偶。

注意:如果能夠保證1.1.2是全局唯一的,那么可以通過短名字來訪問獲取value觉增。--> 主要是方便兵拢,但實際上用處不多。個人感覺

1. mappedStatements變量

1.2 resultMap是一個StrictMap

這個用來存儲所有映射文件xml中的resultMap節(jié)點的數(shù)據(jù)

2. resultMap變量

1.3 ?loadedResources變量

用來存儲所有的映射文件的位置逾礁,和該映射文件對應(yīng)的接口的全限定名说铃。

3. loadedResources變量

1.4 sqlFragments

用來存儲所有的sql標簽的代碼片段,類似如下面的的這樣子嘹履。

4. sql標簽的代碼段
5. sqlFraments(我的xml中沒有這種片段腻扇,所以為0)

1.5 keyGenerators

selectKey標簽個片段

selectKey片段
6.selectKey標簽片段
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市砾嫉,隨后出現(xiàn)的幾起案子幼苛,更是在濱河造成了極大的恐慌,老刑警劉巖焕刮,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舶沿,死亡現(xiàn)場離奇詭異,居然都是意外死亡配并,警方通過查閱死者的電腦和手機括荡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荐绝,“玉大人一汽,你說我怎么就攤上這事〉吞玻” “怎么了召夹?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恕沫。 經(jīng)常有香客問我监憎,道長,這世上最難降的妖魔是什么婶溯? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任鲸阔,我火速辦了婚禮偷霉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘褐筛。我一直安慰自己类少,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布渔扎。 她就那樣靜靜地躺著硫狞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晃痴。 梳的紋絲不亂的頭發(fā)上残吩,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音倘核,去河邊找鬼泣侮。 笑死,一個胖子當著我的面吹牛紧唱,可吹牛的內(nèi)容都是我干的活尊。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼琼蚯,長吁一口氣:“原來是場噩夢啊……” “哼酬凳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遭庶,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宁仔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后峦睡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翎苫,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年榨了,在試婚紗的時候發(fā)現(xiàn)自己被綠了煎谍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡龙屉,死狀恐怖呐粘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情转捕,我是刑警寧澤作岖,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站五芝,受9級特大地震影響痘儡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枢步,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一沉删、第九天 我趴在偏房一處隱蔽的房頂上張望渐尿。 院中可真熱鬧,春花似錦矾瑰、人聲如沸砖茸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渔彰。三九已至嵌屎,卻和暖如春推正,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宝惰。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工植榕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尼夺。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓尊残,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淤堵。 傳聞我的和親對象是個殘疾皇子寝衫,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容