我总共分成了四小节,更多请见
02.MyBatis原理分析之SqlSession
03.MyBatis原理分析MapperProxy
04.MyBatis源码分析之查询操作

1. Test

01.MyBatis原理分析之SqlSessionFactory

2. SqlSessionFactoryBuilder

  • org.apache.ibatis.session.SqlSessionFactoryBuilder

  • 根据配置文件(全局配置文件+sql 映射文件)开始解析

01.MyBatis原理分析之SqlSessionFactory

3. XMLConfigBuilder

  • org.apache.ibatis.builder.xml.XMLConfigBuilder

  • 此类主要用来解析全局配置文件

3.1 parse()
  • mybatis 的全局配置文件父节点是 configuration,所以从这里开始解析
01.MyBatis原理分析之SqlSessionFactory
3.2 parseConfiguration(XNode root)
  • 对全局配置文件的每一个节点进行解析,然后放到 configuration 对象中,在这里我们只分析遇到 mappers 节点会如何解析,因为 mapperss 节点会解析 sql 映射文件
01.MyBatis原理分析之SqlSessionFactory
3.3 mapperElement(XNode parent)
  • 因为是用 resource 加载资源,所以进入此方法
01.MyBatis原理分析之SqlSessionFactory

4. XMLMapperBuilder

  • org.apache.ibatis.builder.xml.XMLMapperBuilder

  • 此类主要用来解析 sql 映射文件

4.1 parse()
  • 从映射文件的 mapper 节点开始解析
01.MyBatis原理分析之SqlSessionFactory
4.2 configurationElement(XNode context)
  • 会解析 mapper 文件的所有节点,在这里我们只对 select|insert|update|delete 标签分析
01.MyBatis原理分析之SqlSessionFactory
4.3 buildStatementFromContext(List list)
01.MyBatis原理分析之SqlSessionFactory
4.4 buildStatementFromContext(List list, String requiredDatabaseId)
01.MyBatis原理分析之SqlSessionFactory

5. XMLStatementBuilder

  • org.apache.ibatis.builder.xml.XMLStatementBuilder

  • 对每个标签开始进行解析

01.MyBatis原理分析之SqlSessionFactory

6. MapperBuilderAssistant

  • org.apache.ibatis.builder.MapperBuilderAssistant

  • 构建出一个 statement 对象

01.MyBatis原理分析之SqlSessionFactory

7. Configuration

  • org.apache.ibatis.session.Configuration
7.1 addMappedStatement(MappedStatement ms)
  • 每个 ms 就代表一个增删改查的详细信息,把它添加到 mappedStatements
01.MyBatis原理分析之SqlSessionFactory
7.2 put(String key, V value)
  • mappedStatements 实际上继承了 HashMap,重写了 put 方法,所以每次添加会添加两个值(一个短 id,一个原本 id)
01.MyBatis原理分析之SqlSessionFactory

8. Test

  • 最终 sqlSessionFactory 里的 configuration 包含了所有的 配置文件信息
01.MyBatis原理分析之SqlSessionFactory

相关文章: