第4章 MyBatis源码结构概述

经过第3章的学习,我们对 MyBatis的初始化阶段、数据读写阶段都有了粗略的了解,同时也对整个流程中涉及的类、方法有了模糊的认识。

在这一章,我们将对 MyBatis源码中所有的包从功能上进行归类划分,为后续分类展开源码阅读工作奠定基础。

4.1 包结构

首先下载 MyBatis的源码,可以通过以下地址下载带中文注释的 3.5.2版:

下载项目源代码后,在“src\main\java\org.apache.ibatis”目录下可以看到 MyBatis 项目的所有包,共 20个,如图4-1所示。

图4-1 MyBatis项目的包

4.2 分组结构

按照包的功能,我们将所有的包分成三大类:

· 基础功能包:这些包用来为其他包提供一些外围基础功能,如文件读取功能、反射操作功能等。这些包的特点是功能相对独立,与业务逻辑耦合小。

· 配置解析包:这些包用来完成配置解析、存储等工作。这些包中的方法主要在系统初始化阶段运行。

· 核心操作包:这些包用来完成数据库操作。在工作过程中,这些包可能会依赖基础功能包提供的基础功能和配置解析包提供的配置信息。这些包中的方法主要在数据库操作阶段运行。

以上只是功能上的大致划分,各个包中的类、方式实际是互相关联、交织耦合在一起的。

在其他项目的源码阅读中,也可以按照上面的方式对包进行功能归类。这会使得后面的源码阅读工作更加有条理、有层次。

按照功能划分好的包如下所示。

· 基础功能包:

-exceptions

-reflection

-annotations

-lang

-type

-io

-logging

-parsing

· 配置解析包:

-binding

-builder

-mapping

-scripting

-datasource

· 核心操作包:

-jdbc

-cache

-transaction

-cursor

-executor

-session

-plugin

可以用图4-2来表示这些包在整个 MyBatis中的作用。

图4-2 MyBatis项目中包的作用

源码阅读过程中有一个非常重要的技巧,那就是从整个项目的外围源码入手。

· 外围源码很少依赖核心源码,相对独立。先阅读外围源码,受到其他未阅读部分的干扰较小。

· 核心源码大量依赖外围源码。在阅读核心源码时应确保其涉及的外围源码均已阅读完毕,这样可以降低核心源码的阅读难度。

于是整个源码阅读过程会如同剥洋葱一般,由外及内、逐层深入。

MyBatis 源码中,基础功能包是最外围的包,配置解析包位于中间,核心操作包位于内层。因此,本书中会按照基础功能包、配置解析包、核心操作包的顺序,以包为单位,对包中的源代码逐一进行阅读。