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执行语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值