前面我们分享了mybatis的核心组件和整体运行流程等设计的源码,今天我们按照之前分析的思路来尝试手写一下mybatis的核心运行流程实现。通过我们手写mybatis,更好的体会它的整体架构设计思想、核心运行流程和本质,从而提升我们的架构能力。

整体运行流程

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析

mybatis源码的核心运行流程三大阶段之前已经介绍得很多了,它的本质不会脱离一个ORM框架应该干的事儿。那么按照这个主体思路和mybatis源码实现层面的一些好的设计,我手写了一个精简版的mybatis核心业务流程设计实现。精简版mybatis要实现的目标是:从设计角度实现完成一个和mybatis运行流程类似的轻量级mybatis,从开发角度调用下面的代码运行并输出正确的结果:

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析_02

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_03

上面的测试调用的可不是mybatis的API完成的,而是今天mybatis精简版完成的目标。它的整体骨架结构如下:

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_04

datasource(数据源组件):负责封装非池化的数据源信息、提供设计层面数据连接的构建和管理等;

configuration(配置组件):外部资源的解析、封装、缓存和全局的配置对象的构建;

binding(绑定组件):负责实现Mapper动态代理的相关功能的增强、数据库核心操作执行的映射和内部统一访问路由封装;

executor(执行器组件):负责封装mybatis执行的核心底层接口:执行器、Statement处理器、ResultSet处理器等;

reflection(反射工具):封装参数映射、结果集映射和转换的基础反射能力;

session(会话组件):负责封装数据库会话生命周期内的各种行为能力;

下面就来分块一一过一下整体的源码和实际运行效果

源码设计实现

数据源组件源码

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_05

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_06

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_07

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_08

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_09

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_10

配置组件源码

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_11

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析_12

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_13

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析_14

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_15

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_16

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_17

绑定组件源码

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_18

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析_19

会话组件源码

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_20

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_21

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_22

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_23

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_24

执行器组件源码

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析_25

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_26

mybatis实战 - 透过现象看本质,手写Mybatis_mybatis_27

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_28

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_29

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_30

反射工具源码

mybatis实战 - 透过现象看本质,手写Mybatis_手写mybatis_31

源码结构

mybatis实战 - 透过现象看本质,手写Mybatis_设计实战_32

运行结果

mybatis实战 - 透过现象看本质,手写Mybatis_源码解析_33

总结

以上就是整个精简版mybatis的设计源码,其实只要看过源码或之前的文章,对以上的实现思路应该是尽在不言中才对。最好的源码学习方式是动手。很多朋友看源码都有大脑告诉自己明白,但是手还是不会。所以动手是检验你的学习效果最好方式。推荐看了源码后,动手把源码的设计和你的理解结合,然后设定一个目标来实现一下,或许你能真正得到的更多!OK这次源码实战暂告一段落,更多其它java相关技术的干货,请继续关注!