Mybatis启动解析配置阶段流程图

262 阅读2分钟

写在前面:

  1. 本篇总结记录一下在阅读mybatis源码时候的流程图,方便以后回顾时候能快点下手。从mybatis整体流程图到每一个步骤的具体解析内容,可以对照源码会更加清楚一些。
  2. 写文章将mybatis整体运行分为两阶段进行总结,第一部分为加载解析阶段,第二部分为时机调用阶。本篇章为第一阶段:加载解析阶段。
  3. 流程图仅仅是各个阶段的大步骤,很多细节可以自己去探索,以后我也争取写出来留作笔记

正文

直接上图吧
第一张图:为mybatis整体流程图 mybaits整体流程.png

第二张图:总流程当中使用SqlSessionFactoryBuilder进行加载配置文件,图二为SqlSessionFactoryBuilder中build方法,然后XmlConfigBuilder加载配置文件,创建全局Configuation对象。然后返回默认的工厂对象。用于后续创建SqlSession SqlSessionFactoryBuilder流程.png

第三张图:在XmlConfigBuilder解析xml信息时候,会解析到Mapper文件信息。由XMLMapperBuilder进行解析处理。解析具体的mapperxml.xml文件或者解析类数据。图二中写着相互调用是因为无论采取哪种方式配置都会处理到。而且步骤都是优先处理xml文件,再处理对应的类去解析注解信息,此处会将mapper接口加入全局配置中,封装为mapper对应的factory,便于以后使用获取代理对象。 XMLMapperBuilder流程图.png

第四张图:XMLStatementBuilder开始解析具体一个sql语句标签,<insert/>,<select>标签等, 获取标签中每一个数据进行处理。同时获取SqlSource属性对象,也就是解析到了具体的Sql语句信息。根据所有的属性信息封装成一个MapperStatement对象。 XMLStatementBuilder流程图.png

第五张图:XMLScriptBuilder开始处理类似于<insert>具体数据里面的标签,会判断里面的内容,是否包含<if>,<where>或其他标签,如果包含${}或者标签,则会设置为动态sql,否则为静态sql,封装成不同的SqlSource,最后通过SqlSourceBuilder将#{}转换为?占位符。 XMLScriptBuilder流程图.png

        整体来看,加载和解析过程很清晰,各司其职,都有对应的Builder进行处理自己的事情,所以理解起来相对也会好很多。

        以上为总结的解析过程结束,此时全局Configuation已经加载完成,所有的sql信息包括mapper信息均已经加载完成。并且返回创建SqlSession的默认工厂,按照写代码,此时就可以通过工厂创建SqlSession,用于操作和执行数据库操作了。

        总结的过程只是整体粗略的步骤,具体里面还有好多细节,可以再进行参考源码进行解析。

        希望本文对学习时候的你有所帮助,接下就要总结执行时候的流程。争取下周搞定