在前几天的学习中,我们通过一个 MyBatis 操作数据库的 Demo,了解了 MyBatis 的整体运行流程,接下来我们将深入到 MyBatis 源码的各个包和类进行源码阅读,今天将先对各个包从功能上进行归类划分,方便我们后续的阅读学习。
MyBatis 包结构
我下载学习的是目前最新版本 MyBatis-3.5.16
的源代码,可以在 GitHub 进行下载:https://github.com/mybatis/mybatis-3/archive/refs/tags/mybatis-3.5.16.zip
下载完成后,可以打开 MyBatis 项目,看到该项目的所有包,共 21 个,如下图所示
包功能划分
在前面的学习中,我们知道,MyBatis 对数据库进行操作包含了解析配置并初始化和数据读写两个阶段,因此可以把这些包划分为配置解析包和数据操作包,还有一部分包是为这两个包提供了一些基本功能的工具包,比如在 util
包里,为 MyBatis 缓存实现提供了一个 MapUtil
类,通过自定义的 computeIfAbsent
方法来避免 JDK8 及之前版本中出现的 JDK-8161372
线程阻塞问题。
在查找资料后,我找到的具体的划分如下所示:
- 工具包:
- -exceptions
- reflection
- annotations
- lang
- type
- io
- logging
- parsing
- util
- 配置解析包:
- binding
- builder
- mapping
- scripting
- datasource
- 数据操作包:
- -jdbc
- cache
- transaction
- cursor
- executor
- session
- plugin
在这些包里,对其他部分的依赖程度从低到高依次排序应该就是工具包 -> 配置解析包 -> 数据操作包,因此接下来的学习我也会按照这个顺序依次阅读源码。