一 准备阅读分支
到Github上Fork源码到自己的github(没有github账号先注册一个)。
然后选择一个发布tag,比如选择mybatis-3.5.7
的源码,再创建一个分支用于阅读源码和写中文注释。如我的源码阅读分支https://github.com/qicoding/mybatis-3/tree/readsource
二 源码包路径统计与分析
通过命令 find . -name "*.java"|xargs cat|grep -v -e ^$ | sed 's/^ *//' | cut -c1 | grep -v / | grep -v "*" | wc -l
查询每个包下的代码行数(去掉注释与空行之后的)
源码对应包的说明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| . └── org └── apache └── ibatis ├── annotations 注解模块 行数:520 ├── binding Binding模块 行数:554 ├── builder 配置解析 行数:2757 ├── cache 缓存模块 行数:921 ├── cursor 游标模块 行数:158 ├── datasource 数据源模块 行数:990 ├── exceptions 异常模块 行数:60 ├── executor SQL执行 行数:3836 ├── io 资源加载模块 行数:796 ├── jdbc jdbc模块 行数:1004 ├── lang lang模块 行数:23 ├── logging 日志模块 行数:913 ├── mapping 映射 行数:1272 ├── parsing 解析器模块 行数:624 ├── plugin 插件模块 行数:171 ├── reflection 反射模块 行数:1956 ├── scripting SQL解析 行数:1130 ├── session 会话模块 行数:1643 ├── transaction 事务管理模块 行数:245 ├── type 类型转换模块 行数:2276 └── util 工具类 行数:20 总行数: 21870
|
通过统计,排除注释和空行之后总的代码行数有21870行,如果我们不了解Mybatis的原理和SQL的执行流程,我们可能很难把这两万多行代码读懂读透。
那么,Mybatis的SQL执行原理是怎么样的呢,请看下图:
所以,我们阅读源码的次序,也是自顶向下,逐步深入阅读。