MyBatis | 详解MyBatis的运行流程

目录

一、MyBatis的运行流程

1、获取SqlSessionFactory对象

2、获取SqlSession对象

3、获取接口的代理对象

4、执行增删改查

二、总结


一、MyBatis的运行流程

1、获取SqlSessionFactory对象

根据配置文件创建SqlSessionFactory对象,解析全局配置文件和sql映射文件。最后创建的对象包含了一个Configuration,其中Configuration封装了所有配置文件的详细信息。
总结来说就是,把配置文件的信息解析并保存在Configuration对象中,返回包含了ConfigurationDefaultSqlSession对象。
详细过程可看图1所示的时序图:

 
13424350-d5063ae6502fbb3d.png
图1:创建SqlSessionFactory的时序图


Configuration对象中有MappedStatementMappedStatement代表一个增删改查的详细信息。

2、获取SqlSession对象

会返回DefaultSqlSession对象,其是SqlSession的实现类。DefaultSqlSession对象包含了ExecutorConfiguration对象,Executor对象会在这一步被创建。
详细过程可看图2所示的时序图:

 
13424350-40c40ed1046c277b.png
图2:获取SqlSession对象的时序图

3、获取接口的代理对象

使用MapperProxyFactory创建一个MapperProxy代理对象。返回的接口代理对象包含了SqlSession对象。
详细过程可看图3所示的时序图:

 
13424350-c255bc7cfe7ed5bc.png
图3:获取接口代理对象的时序图

4、执行增删改查

 
13424350-c6690820725f6082.png
图4:执行增删改查时的时序图

对于产生的几个对象的作用:

  • StatementHandler:处理sql语句预编译,设置参数等相关工作。
  • ParameterHandler:设置预编译参数用的。
  • ResultHandler:处理结果集。
  • TypeHandler:在整个过程中,进行数据库类型和JavaBean类型的映射。

执行增删改查流程总结如下:

 
13424350-510fb52522c18b79.png
图5:执行增删改查流程总结

二、总结

  • 根据配置文件(全局配置文件和sql映射文件)初始化出Configuration对象
  • 创建一个DefaultSqlSession对象,里面包含了Configuration及其Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor
  • DefaultSqlSession.getMapper()拿到Mapper接口对应的MapperProxy对象。
  • MapperProxy里面有(DefaultSqlSession)。
  • 执行增删改查方法
    (1)调用DefaultSqlSession的增删改查(Executor
    (2)创建一个StatementHandler对象,同时也会创建出ParameterHandlerResultSetHandler
    (3)调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数。
    (4)调用StatementHandler的增删改查方法。
    (5)ResultSetHandler封装结果。
  • 注意:四大对象创建的时候都有一个interceptorChain.pluginAll(parameterHandler),后续的插件开发就是用的其原理。

猜你喜欢

转载自blog.csdn.net/qq_14810195/article/details/103536984