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

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

通過SqlSessionFactoryBuilder來構(gòu)建一個(gè)SqlSessionFactory對(duì)象
3. ?進(jìn)入mybatis源碼中細(xì)細(xì)解析
關(guān)鍵類:
1. SqlSessionFactoryBuilder --> 控制創(chuàng)建SqlSessionFactory的整個(gè)流程
2. XMLConfiguration --> 解析xml中的屬性
3. DefaultSqlSessionFactory --> 創(chuàng)建SqlSessionFactory
4. Configuration --> 核心類,解析后的xml文件后的數(shù)據(jù)幾乎全部都在這里

3.1 通過解析mybatis-config.xml文件來獲取一個(gè)XMLConfigBuilder的實(shí)例parser
parser中存放的是mybatis-config.xml文件中configuration節(jié)點(diǎn)下的整個(gè)xml樹的數(shù)據(jù)。



3.2 通過parser.parse()方法來把這個(gè)xml樹的數(shù)據(jù)提取到Configuration的實(shí)例中。
configguration的實(shí)例在mybatis框架中是一個(gè)單例的,是框架中的核心類,畢竟很多東西都要從Configuration中獲取。


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


總結(jié),這樣子就完成了一個(gè)SqlSessionFactory實(shí)例的創(chuàng)建。
備注
這時(shí)候,我們來看看Configuration中一些關(guān)鍵變量值是什么
1. 1 mappedStatements是一個(gè)StrictMap(mybatis自己在HashMap上封裝的)。
這個(gè)map的key有兩種形式:?
1.1.1 ?映射文件中namescape+id ?--> 全局唯一,不唯一程序直接炸錯(cuò)
1.1.2 取1.1 中得到最后一個(gè)句點(diǎn)(.)后的單詞(StrictMap中叫做shortname) --> 短名字可能會(huì)重復(fù),程序無所謂,繼續(xù)跑
因此這個(gè)map的value也有兩種形式:
1.2.1 如果可以保證1.1.1 和 1.1.2 的規(guī)則都是全局唯一的,那么value就是MappedStatement的實(shí)例。
1.2.2 如果1.1.2 沒有辦法保證是全局唯一的,那么這個(gè)短名字為key對(duì)應(yīng)的value是Ambiguity的實(shí)例。
注意:如果能夠保證1.1.2是全局唯一的,那么可以通過短名字來訪問獲取value。--> 主要是方便,但實(shí)際上用處不多。個(gè)人感覺

1.2 resultMap是一個(gè)StrictMap
這個(gè)用來存儲(chǔ)所有映射文件xml中的resultMap節(jié)點(diǎn)的數(shù)據(jù)

1.3 ?loadedResources變量
用來存儲(chǔ)所有的映射文件的位置,和該映射文件對(duì)應(yīng)的接口的全限定名。

1.4 sqlFragments
用來存儲(chǔ)所有的sql標(biāo)簽的代碼片段,類似如下面的的這樣子。


1.5 keyGenerators
selectKey標(biāo)簽個(gè)片段

