1.構建者模式創建SqlSessionFactory
2.進入 SqlSessionFactory build方法
// <1> 創建 XMLConfigBuilder 對象
// <2> 執行 XML 解析
// <3> 創建 DefaultSqlSessionFactory 對象
2.1 創建 XMLConfigBuilder 對象
2.1.1 執行XPathParser構造方法,主要是爲了構建以下變量
2.1.2 XMLConfigBuilder構造方法,主要是加入兩個註冊器,存儲的是別名與類名的映射關係,別名其實就是xml配置文件裏Type屬性值
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
2.2 解析xml
2.2.1 evalNode 主要是將Node封裝成Xnode,裏面的詳細解析過程就是java xpath解析xml成java對象,主要看下解析配置文件吧,它主要是按照xml文件中的節點一個一個解析的
2.2.1.1 // <10> 解析 <environments /> 標籤 environmentsElement(root.evalNode("environments")); 先拿這個解析吧,主要是創建jdbc連接需要的資源。一層一層的解析配置
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:automapping"/>
<property name="username" value="sa"/>
</dataSource>
</environment>
</environments>
// txFactory -->JdbcTransactionFactory
TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager"));
//dsFactory -->UnpooledDataSourceFactory
DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource"));
//environmentBuilder.build()-->Environment-->configuration
configuration.setEnvironment(environmentBuilder.build());
經過上面的一陣折騰,configuration將環境信息裝到自己的包裏了。
2.2.1.2 // <13> 解析 <mappers /> 標籤
根據配置文件裏的xml它會走如下邏輯,這次使用 mapper構造器 XMLMapperBuilder
開始解析xxx-mapper.xml
//存儲資源 <mapper resource="org/apache/ibatis/autoconstructor/AutoConstructorMapper.xml"/>
protected final Set<String> loadedResources = new HashSet<>();
//存儲mapper類
protected final MapperRegistry mapperRegistry = new MapperRegistry(this);
至此configuration前期xml解析完成。這些動作都是圍繞configration 來轉的。可能需要自己掌握java Xpath,反射,設計模式。期待下一篇,獲取session執行語句。