理解一个类,首先需要知道类的作用。SqlSessionFactoryBean 类的作用就是通过加载器读取mybatis.xml 和 myabtis-spring.xml生成 SqlSessionFactory。先看一下mybatis配置文件和mybatis-spring整合配置文件。
mybatis 属性配置:

mybatis-spring 整合:

SqlSessionFactoryBean 类继承了 InitializingBean , InitializingBean 的作用是初始化容器后,会执行 afterPropertiesSet() 方法。

从上图中的红框中可以看出,启动时会执行 buildSqlSessionFactory 方法,作用就是创建 SqlSessionFactory。
在介绍 buildSqlSessionFactory 方法之前,需要了解一下 org.apache.ibatis.session.Configuration 类。

Configuration 类的作用是用来存储 mybatis.xml 配置的各种属性,创建 SqlSessionFactory 的过程就是不断的读取配置文件中的属性,然后 set 进入 Configuration 中。

初始化 Configuration 对象之后,需要对传入 SqlSessionFactoryBean 不为空的对象进行赋值。例:

至此。SqlSessionFactoryBean 传入属性赋值已经讲述完成。下面讲述的是对于 mybatis.xml 和 mybatis-spring.xml 中 mapperLocations 的解析。
XMLConfigBuilder:解析mybatis.xml配置文件,使用读取配置文件中各个节点的方式,将属性值set进入Configuration对象。

mybatis.xml解析过程:

从源码可以看出,最开始截取的是根节点 /configuration。然后对根节点中的各个节点进行切割。但是切割的方法都是一样的:root.evalNode()。
切割完成之后,就是将各个元素保存在Configuration中。下面截图是针对于<settings>元素的保存过程

接下来就是最后一步了,对于 mapper.xml 的解析。使用的 XMLMapperBuilder。

相信大家对于 mapper.xml 配置格式已经很清晰,这里就不过多介绍,上源码。

在 configurationElement 是仍然是对于各个节点的拆分,然后针对于各个属性进行一个Configure。

最后将项目中所需要的预加载属性存放到 SqlSource 对象中,进行预加载。

由于本文中需要有一些 mybatis 基础。如果发现看起来较吃力,可以先看一下官方的文档,里面有对于各个属性,配置和简单入门使用的讲解。官网地址:http://www.mybatis.org/mybatis-3/zh/index.html
网友评论