0.mybatis四大对象

Executor : 执行器
parameterHandler : 参数解析器
statementHandler : sql解析器
resultsetHandler : 结果集解析器

1.SqlSessionFactory初始化

0.大致流程

当调用SqlSessionFactoryBuilder.build()时,会先通过XMLConfigBuilder类去解析mybatis配置文件的全部信息并存入configuration,随后再解析mappers标签,方法中通过XMLMapperBuilder类去解析mapper映射文件中的全部信息存入configuration并将每个增删改查标签的全部信息组成为一个个单独的MappedStatement,存入configuration的MappedStatements中。
此时configuration已经包含了mybatis配置文件和mapper映射文件的全部详细信息,其中增删改查的详细信息是在MappedStatements集合中,mapper接口的代理类对象是在MapperRegistry中。
随后将configuration返回给SqlSessionFactory并作为参数传入SqlSessionFactory.build()方法中,返回的是DefaultSqlSessionFactory对象。

1.向SqlSessionFactoryBuilder.build()方法传入输入流

image.png

2.创建全局配置文件解析器

image.png

3.解析全局配置文件中每一个标签,并且把详细信息填入configuration对象

image.png
image.png
image.png

4.解析mapper映射文件每一个标签并保存在全局配置中

一个mappedStatement就代表一个增删改查标签的详细信息,并保存至configuration的mappedStatements中
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

5.返回封装了所有信息的configuration

image.png

6.通过返回的configuration创建一个DefaultSqlSessionFactory

image.png

7.整体过程

image.png

2.获取sqlsession对象

image.png

3.获取接口的代理对象(mapper)

image.png

4.执行方法

image.png

5.mybatis运行原理

1.通过加载mybatis全局配置文件以及mapper映射文件初始化configuration对象和Executor对象(通过全局配置文件中的defaultExecutorType初始化);
2.创建一个defaultSqlSession对象,将configuration对象和Executor对象注入给defaulSqlSession对象中;
3.defaulSqlSession通过getMapper()获取mapper接口的代理对象mapperProxy (mapperProxy中包含defaultSQLSession对象)
4.执行增删改查:
1)通过defaulSqlSession中的属性Executor创建statementHandler对象;
2)创建statementHandler对象的同时也创建parameterHandler和 resultSetHandler;
3)通过parameterHandler设置预编译参数及参数值;
4)调用statementHandler执行增删改查;
5)通过resultsetHandler封装查询结果