配置信息的解析以及SqlSessionFactory构建过程

一.配置信息解析过程:

调用SqlSessionFactoryBuilder的build()方法,利用XMLConfiguration方法里的parseConfiguration方法解析相关的配置。inputStream流是mybatis-config.xml配置对应的字节流。

XMLConfigBuilder的parse()方法解析mybatis-config.xml节点得到Configuration配置类。

简单总结一下这里:parseConfiguration完成是解析configuration下的所有标签,主要包括enviroment,mappper接口,别名等信息。

接下来我们来看myabtis是如何解析enviroment标签内容的:

主要看enviromentElement()方法里的dataSourceElement()方法,主要是解析出dataSource标签内配置的四个properties属性,并封装成Properties对象,赋值给DataSouceFactory,返回DataSouceFactory对象。最后将环境信息读取后存放在Confiuartion变量中。

二.Mapper接口解析过程:

对mapper接口的解析,看XMLConfigBuilder的mapperElement()。里面主要还是调用了XMLConfigBuilder的parse方法。这里使用了构建者模式。

pase方法里主要干了两件事:

1.调用了configurationElement()来对具体的mapper子标签进行解析;

2.调用bindMapperForNamespace()方法进行mapper接口与XML的绑定。其中这个方法很重要,MapperedStatement对象就是在这里创建的。

bindMapperForNamespace()方法里又调用了buildStatementFromContext()方法,该方法里的statementParse.parseStatementNode()才是具体解析增删改查的方法。在parseStatementNode()最后,调用了addMapperStatement(),所以呢,上面说了MapperStatement就是在这里创建的。MapperStatements里就是存放了具体的sql信息。他其实就是一个Map<String,MappedStatement>,他也是configuration类的一个成员属性。

为什么要用map呢?答:从mapperStatements根据【namespace+方法名称】作为key,从mapperStatements中获取到MapperStatement对象,进而拿到对应的sql信息,就能执行sql了。

三:Mapper接口与MapperProxyFactory的绑定过程:

上面也提到了这个方法bindMapperForNamespace(),看看他的源码:

这个方法里最主要的还是调用了configuration.addMapper()方法。这里面将mapper接口作为key,存入knowMappers中。

好了,大体总结一下:最终是将Configuration作为参数构建出了DefautSqlSessionFactory对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值