1. 概述

本文主要分享 MyBatis 的项目结构。

2. 代码统计

这里先分享一个小技巧。笔者在开始源码学习时,会首先了解项目的代码量。

第一种方式,使用 IDEA Statistic 插件,统计整体代码量。

我们可以粗略的看到,总的代码量在 21441 行。还是在可接受的范围。

第二种方式,使用 Shell 脚本命令逐个 Maven 模块统计 。

一般情况下,笔者使用 find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l 。这个命令只过滤了部分注释,所以相比 IDEA Statistic 会偏多。

如下是艿艿 cd 到每个包下,然后执行脚本统计后的结果:

3. 整体架构

MyBatis 的整体架构分为三层:

  1. 基础支持层
  2. 核心处理层
  3. 接口层

3.1 基础支持层

基础支持层,包含整个 MyBatis 的基础模块,这些模块为核心处理层的功能提供了良好的支撑。

3.1.1 反射模块

对应 reflection 包。

3.1.2 类型模块

对应 type 包。

3.1.3 日志模块

对应 logging 包。

3.1.4 IO 模块

对应 io 包。

3.1.5 解析器模块

对应 parsing 包。

3.1.6 数据源模块

对应 datasource 包。

3.1.7 事务模块

对应 transaction 包。

3.1.8 缓存模块

对应 cache 包。

3.1.9 Binding 模块

对应 binding 包。

3.1.10 注解模块

对应 annotations 包。

随着 Java 注解的慢慢流行,MyBatis 提供了注解的方式,使得我们方便的在 Mapper 接口上编写简单的数据库 SQL 操作代码,而无需像之前一样,必须编写 SQL 在 XML 格式的 Mapper 文件中。虽然说,实际场景下,大家还是喜欢在 XML 格式的 Mapper 文件中编写响应的 SQL 操作。

3.1.11 异常模块

对应 exceptions 包。

定义了 MyBatis 专有的 PersistenceException 和 TooManyResultsException 异常。

3.2 核心处理层

在核心处理层中,实现了 MyBatis 的核心处理流程,其中包括 MyBatis 的初始化以及完成一次数据库操作的涉及的全部流程 。

3.2.1 配置解析

对应 builder 和 mapping 模块。前者为配置解析过程,后者主要为 SQL 操作解析后的映射。

3.2.2 SQL 解析

对应 scripting 模块。

3.2.3 SQL 执行

对应 executor 和 cursor 模块。前者对应执行器,后者对应执行结果的游标。

3.2.4 插件层

对应 plugin 模块。

3.3 接口层

对应 session 模块。

3.4 其它层

这块,严格来说,不能叫做一个层。

3.4.1 JDBC 模块

对应 jdbc 包。

JDBC 单元测试工具类。

3.4.2 Lang 模块

对应 lang 包。

3.4 总结

总的来说,MyBatis 的代码,还是比较简单易懂。并且,看着包名,基本也能猜到大体的用途。在网络上找了一个总结的图,大家瞅瞅:

02-14 02:38