Mybatis框架一条插入语句的执行流程
2020-07-05 本文已影响0人
spring_coderman
近期准备做一下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的一条插入语句的执行流程,一方面可以了解Mybatis的各个组件之间如何配合工作,另一方面也借助test case通过debug去了解其中一些细节。
当然,这个场景作为面试题也会经常遇到,但是通常不会分为插入语句和查询语句,侧重点不一样,这里主要是因为插入语句和查询语句在整体流程上大同小异。
先上一张整体的流程图:
MybatisInsertSqlSequence.png
上图是从Test case来进行整体调用流程的梳理,实际上当我们调用DAO层接口的时候是从MapperProxy开始往后走的。
下面我们通过Test case开始debug走一遍执行流程,图可能比较多,请耐心仔细看。
我们启动的方法依然是:org.apache.ibatis.session.SqlSessionManagerTest#shouldCommitInsertedAuthor()
insert1.png insert2.png insert3.png insert4.png insert5.png insert6.png insert7.png
通过上面几张图我们整体走了一遍插入流程,但是有两个相对细节的地方没有讲到,读者可以专门通过上面的debug方式关注一下。
1.如何一步一步生成插入/修改/删除语句的。BoundSql
2.配置插入SQL返回当前记录主键id的功能Mybatis是如何实现的。