做为一个java web开发人员,你也许对Spring+Spring Boot+Mybatis的架构早已烂熟于心,上来你可能就可以直接写业务代码,ok 没问题,但是作为你最熟悉的Mybatis,ORM框架之一,也许问你怎么开发DAO层, 也许你可以不加思索的说出答案。建一个接口,写对应的map.xml文件,但是有没有想过,框架的执行原理是什么?为什么我们写这么少的代码,就可以替代我们之前用原生jdbc写的那么多代码呢?底层他帮我们做了些什么呢?为什么能这么6呢?讲的这里 也许有同学会说,不就是用了个动态代理吗? 如果你这样回答的话 只是回答了一部分,如果用了动态代理,那么下图右侧的TargetImpl哪里去了 ,我们可是只定义了一个接口类,并没有写我们类的实现?

接下来我们就来看看Mybatis的内部是怎么执行的,为什么可以直接使用接口去调用方法?


Mybatis源码解析

MyBatis架构图

Mybatis源码解析

上图可以看出有这么几个重要的组件: Configuration,Mapper,Mapped Statements等接下来我们就来看下这几个组件是怎么协同工作的,怎么如此完美的把底层JDBC的工作帮助我们完成的。通过debug源代码会发现下边有趣的地方。

Mybatis源码解析

上图我们可以看到SqlSession起到了一个承上启下的作用。

Mybatis源码解析

上图可以看出DefaultSqlSession对象持有Configuration和Executor两个对象引用,因此有下图的结果

Mybatis源码解析


最终进行Debug得到一个完整的源码分析时序图

Mybatis源码解析



相关文章: