一、MyBatis的运行流程
1、获取SqlSessionFactory对象
根据配置文件创建SqlSessionFactory
对象,解析全局配置文件和sql映射文件。最后创建的对象包含了一个Configuration
,其中Configuration
封装了所有配置文件的详细信息。
总结来说就是,把配置文件的信息解析并保存在Configuration
对象中,返回包含了Configuration
的DefaultSqlSession
对象。
详细过程可看图1所示的时序图:
在
Configuration
对象中有MappedStatement
,MappedStatement
代表一个增删改查的详细信息。
2、获取SqlSession对象
会返回DefaultSqlSession
对象,其是SqlSession
的实现类。DefaultSqlSession
对象包含了Executor
和Configuration
对象,Executor
对象会在这一步被创建。
详细过程可看图2所示的时序图:
3、获取接口的代理对象
使用MapperProxyFactory
创建一个MapperProxy
代理对象。返回的接口代理对象包含了SqlSession
对象。
详细过程可看图3所示的时序图:
4、执行增删改查
图4:执行增删改查时的时序图对于产生的几个对象的作用:
-
StatementHandler
:处理sql语句预编译,设置参数等相关工作。 -
ParameterHandler
:设置预编译参数用的。 -
ResultHandler
:处理结果集。 -
TypeHandler
:在整个过程中,进行数据库类型和JavaBean类型的映射。
执行增删改查流程总结如下:
图5:执行增删改查流程总结
二、总结
- 根据配置文件(全局配置文件和sql映射文件)初始化出
Configuration
对象 - 创建一个
DefaultSqlSession
对象,里面包含了Configuration
及其Executor
(根据全局配置文件中的defaultExecutorType
创建出对应的Executor
) -
DefaultSqlSession.getMapper()
拿到Mapper接口对应的MapperProxy
对象。 -
MapperProxy
里面有(DefaultSqlSession
)。 - 执行增删改查方法
(1)调用DefaultSqlSession
的增删改查(Executor
)
(2)创建一个StatementHandler
对象,同时也会创建出ParameterHandler
和ResultSetHandler
。
(3)调用StatementHandler
预编译参数以及设置参数值,使用ParameterHandler
来给sql设置参数。
(4)调用StatementHandler
的增删改查方法。
(5)ResultSetHandler
封装结果。 - 注意:四大对象创建的时候都有一个
interceptorChain.pluginAll(parameterHandler)
,后续的插件开发就是用的其原理。
网友评论