美文网首页Javamybatis
MyBatis | 详解MyBatis的运行流程

MyBatis | 详解MyBatis的运行流程

作者: 一颗白菜_ | 来源:发表于2019-12-13 19:03 被阅读0次

    一、MyBatis的运行流程

    1、获取SqlSessionFactory对象

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

    图1:创建SqlSessionFactory的时序图
    Configuration对象中有MappedStatementMappedStatement代表一个增删改查的详细信息。

    2、获取SqlSession对象

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

    图2:获取SqlSession对象的时序图

    3、获取接口的代理对象

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

    图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对象,同时也会创建出ParameterHandlerResultSetHandler
      (3)调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数。
      (4)调用StatementHandler的增删改查方法。
      (5)ResultSetHandler封装结果。
    • 注意:四大对象创建的时候都有一个interceptorChain.pluginAll(parameterHandler),后续的插件开发就是用的其原理。

    相关文章

      网友评论

        本文标题:MyBatis | 详解MyBatis的运行流程

        本文链接:https://www.haomeiwen.com/subject/mynxnctx.html