Mybatis源码解读(一)初始化

首先我们需要了解mybatis初始化大致做了什么

1. 创建SqlSessionFactory
2. 通过SqlSessionFactory来创建sqlSession

那么初始化中创建SqlSessionFactory需要什么,配置文件和mapper文件如何加载,如何调用sql等到底是如何实现的呢,接下来就进入源码解读


为了创建SqlSessionFactory,mybatis需要读取配置文件并且注入大量属性值
因为使用的spring配置的Mybatis,所以使用SqlSessionFactoryBean的buildSqlSessionFactory方法

其中创建了ConfigurationXmlConfigBuilder,在初始化过程中起着重要作用
buildSqlSessionFactory方法前部都在将spring中的配置信息设置到Configuration对象中。
例如下图:向Configuration注入了spring的事务管理

接下来重点来了,当检测到mapperLocations时,即mapper文件的所在路径时,开始解析配置文件
 

重点介绍这个方法xmlMapperBuilder.parse()

parse()方法中有两个重要方法

  1. configurationElement
  2. bindMapperForNamespace

(1)configurationElement方法主要做了:

1. 组装builderAssistant,用于存储组装时需要的参数
2. 继续给Configuration添加属性,如缓存、命名空间
3. buildStatementFromContext负责解析sql

buildStatementFromContext方法,该方法的入参是标签为“select|insert|update|delete”的节点,分别对应一个XNode,随后遍历获取节点的属性,传入builderAssistant.addMappedStatement()方法。这个方法返回MappedStatement,保存着mapper每个标签下的所有信息。每个MappedStatement组装完成后都会保存到Configuration中去

(2)bindMapperForNamespace方法主要用于:

将MappedStatement与Namespace绑定在一起,并在MapperRegistry中的knownMappers(一个保存着mapper代理类的map)添加一个代理类
最后,parse结束返回configuration,根据configuration创建SqlSessionFactory

到这里SqlSessionFactory创建完毕,创建过程中的所有属性配置全部由一个configuration带入。
 

原创文章 96 获赞 201 访问量 67万+

猜你喜欢

转载自blog.csdn.net/sinat_29774479/article/details/94632491