MyBatis 源码解析-解析xml配置文件
Posted bluss-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 源码解析-解析xml配置文件相关的知识,希望对你有一定的参考价值。
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执行语句。
以上是关于MyBatis 源码解析-解析xml配置文件的主要内容,如果未能解决你的问题,请参考以下文章
mybatis源码配置文件解析之五:解析mappers标签(解析class属性)