Mybatis源碼解讀(一)初始化

首先我們需要了解mybatis初始化大致做了什麼

1. 創建SqlSessionFactory
2. 通過SqlSessionFactory來創建sqlSession

那麼初始化中創建SqlSessionFactory需要什麼,配置文件和mapper文件如何加載,如何調用sql等到底是如何實現的呢,接下來就進入源碼解讀


爲了創建SqlSessionFactory,mybatis需要讀取配置文件並且注入大量屬性值
因爲使用的spring配置的Mybatis,所以使用SqlSessionFactoryBean的buildSqlSessionFactory方法

其中創建了ConfigurationXmlConfigBuilder,在初始化過程中起着重要作用
buildSqlSessionFactory方法前部都在將spring中的配置信息設置到Configuration對象中。
例如下圖:向Configuration注入了spring的事務管理

接下來重點來了,當檢測到mapperLocations時,即mapper文件的所在路徑時,開始解析配置文件
 

重點介紹這個方法xmlMapperBuilder.parse()

parse()方法中有兩個重要方法

  1. configurationElement
  2. bindMapperForNamespace

(1)configurationElement方法主要做了:

1. 組裝builderAssistant,用於存儲組裝時需要的參數
2. 繼續給Configuration添加屬性,如緩存、命名空間
3. buildStatementFromContext負責解析sql

buildStatementFromContext方法,該方法的入參是標籤爲“select|insert|update|delete”的節點,分別對應一個XNode,隨後遍歷獲取節點的屬性,傳入builderAssistant.addMappedStatement()方法。這個方法返回MappedStatement,保存着mapper每個標籤下的所有信息。每個MappedStatement組裝完成後都會保存到Configuration中去

(2)bindMapperForNamespace方法主要用於:

將MappedStatement與Namespace綁定在一起,並在MapperRegistry中的knownMappers(一個保存着mapper代理類的map)添加一個代理類
最後,parse結束返回configuration,根據configuration創建SqlSessionFactory

到這裏SqlSessionFactory創建完畢,創建過程中的所有屬性配置全部由一個configuration帶入。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章