Mybatis框架启动流程分析

作者: spring_coderman | 来源:发表于2020-07-04 23:42 被阅读0次

    近期准备做一下Mybatis的源码解读,整个系列大概会有6-7篇文章。

    先释放一下目录:
    1.Mybatis框架组件设计&顶层接口

    2.Mybatis框架启动流程分析

    3.Mybatis框架源码Configuration分析
    4.Mybatis框架一条插入语句的执行流程
    5.Mybatis框架从源码角度来讲执行增,删,改的时候如何保证线程安全?
    6.Mybatis框架一条查询语句的执行流程
    7.Mybatis的日志&异常体系
    8.Mybatis与Spring集成过程
    9.Mybatis的CRUD代码生成

    写这篇文章的目的一方面是面试问的频率比较高,也比较难。另一方面也是对Mybatis的启动流程比较感兴趣,希望知道启动过程中的不同阶段做了什么事,如何组织数据结构。
    这里我阅读的是Mybatis3的一些源码,同时会通过test目录里的test-case做一些debug。阅读源码的效率,理解源码内容上会好很多。

    先放一张流程图说明Mybatis启动过程:


    mybatisStartInit.png

    Mybatis的启动过程有两条线,一条明线,一条暗线:
    明线:简单看Mybatis的启动过程是在通过一些工厂创建SqlSession对象,解析配置文件。
    暗线:实际上是在初始化Configuration.看源码可以知道Configuration在很多地方都被依赖了。但是呢却不怎么了解Configuration在Mybatis中的定位。这个会在第三篇文章中专门对Configuration类做解析介绍。
    下面我们通过debug看一下Mybatis的整体启动初始化过程。
    我们重点跟踪一下Mybatis源码中的test case中的:org.apache.ibatis.session.SqlSessionManagerTest#setup()方法
    先以debug方式启动:org.apache.ibatis.session.SqlSessionManagerTest#shouldCommitInsertedAuthor()方法


    debug源码启动开始.png 准备解析xml初始化Configuration对象.png

    这里有个隐含的问题就是说是初始化Configuration对象,但是从哪初始化的呢,从哪去解析的呢?可以看一下XMLConfigBuilder的构造方法和其父类的构造方法,如下图:


    子类构造方法.png 父类构造方法.png

    上面几步我们已经创建了Configuration对象,并且一些属性有了默认值,如下图:


    Configuration初始化.png

    下面我们继续debug,看org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration()方法


    解析mybatis配置文件初始化Configuration的属性值.png
    这个方法执行结束整个初始化Configuration对象的过程也就结束了,后面会通过这个初始化好的Configuration再创建SqlSessionManager,SqlSessionFactory对象等。
    我们继续跟其中一个方法如:org.apache.ibatis.builder.xml.XMLConfigBuilder#mapperElement 解析xxDAOMapper的入口.png

    这里继续深入一些看这个方法:org.apache.ibatis.builder.xml.XMLMapperBuilder#parameterMapElement()


    QQ截图20200704233345.png

    解析xxDAOMapper.xml的过程比较隐蔽,因为是逐层解析的,因此不会明显的去解析某文件夹下的某xml文件。解析过程的起点是mybatis的配置文件mapperconfig.xml.
    整个解析过程结束后我们简单看一下sqlSessionManager的创建过程。


    创建sqlsession相关的逻辑.png

    到这里我们通过debug的方式将整个mybatis的启动过程梳理了一遍,由于初始化过程涉及到很多具体的处理细节,这里不再展开,读者可以将mybatis的代码down下来,本地直接跑test-case,然后debug具体看某一方面的实现细节,相信一定能收获很多。

    相关文章

      网友评论

        本文标题:Mybatis框架启动流程分析

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