1.MyBatis 整体架构
MyBatis 整体架构 分为三层
- 1.接口层
- 2.核心处理层
- 3.基础支持层
MyBatis 架构如上图所示,从客户端调用开始算以及内部调用顺序,在此我们将其分为三层,,第一层为给咱们客户端使用的 类似对外服务接口 的 接口层。第二层是 MyBatis 的核心功能 供 SqlSession 调用。第三层是 基础支持层,提供一些底层工具,供第二层调用。
2.模块概述
2.1 接口层
package : org.apache.ibatis.session
MyBatis 的代码很规范,所有包下都有 package-info.java 文件,描述当前 package 的功能。
查看源码中 org/apache/ibatis/session/package-info.java 文件
描述很简单,基础包。包含SqlSession。如package-info文件中所说 接口层的核心是 SqlSession 接口,该接口中定义了 MyBatis 暴露给应用程序调用的 API,也就是上层应用与 MyBatis 交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作。
2.2 核心处理层
核心处理层包含初始化以及数据库交互的所有核心功能
2.2.1 配置解析
package :
- org.apache.ibatis.builder
- org.apache.ibatis.mapping
builder 用于 配置解析过程。mapping 用于将SQL相应的操作解析为相应的对象。
2.2.2 SQL解析
package : org.apache.ibatis.scripting
MyBatis 中的 scripting 模块,用于解析 if 、 where 等动态SQL。
2.2.3 SQL 执行
package :
- org.apache.ibatis.executor
- org.apache.ibatis.cursor
executor 是 执行SQL 的 执行器。 cursor 是对返回结果 的处理。
2.2.4 插件模块
package : org.apache.ibatis.plugin
MyBatis 提供了插件接口,我们可以通过添加用户自定义插件的方式对 MyBatis 进行扩展,例如,我们可以在记录SQL执行时间记录到数据库 用于监控运维 或者 sql执行过程中拿到具体执行的sql 美化并打印到日志中方便调试。
2.3 基础支持层
基础支持层,包含整个 MyBatis 的基础模块,这些模块为核心处理层的功能提供了良好的支撑。
2.3.1 反射模块
package : org.apache.ibatis.reflection
MyBatis 中专门提供了反射模块,该模块对 Java 原生的反射进行了良好的封装,提了更加简洁易用的 API,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。
2.3.2 类型模块
package : org.apache.ibatis.type
用于转换 数据库中表字段的类型及其对应的Java类型。
SQL 语句绑定实参时,需要将数据由 Java 类型转换成 JDBC 类型。 映射结果集时,需要将数据由 JDBC 类型转换成 Java 类型。
2.3.3 日志模块
package : org.apache.ibatis.logging
用于 集成第三方日志框架。
2.3.4 IO模块
package : org.apache.ibatis.io
资源加载模块,主要是对类加载器进行封装,确定类加载器的使用顺序,并提供了加载类文件以及其他资源文件的功能 。
2.3.5 解析器模块
package : org.apache.ibatis.datasource
Mybatis 本身自带的数据源实现以及与第三方数据源集成的接口。
2.3.6 数据源模块
package : org.apache.ibatis.datasource
Mybatis 本身自带的数据源实现以及与第三方数据源集成的接口。
2.3.7 事务模块
package : org.apache.ibatis.transaction
MyBatis 对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现。
2.3.8 缓存模块
package : org.apache.ibatis.cache
MyBatis 一级缓存和二级缓存 的具体实现。
2.3.9 Binding模块
package : org.apache.ibatis.binding
MyBatis 通过 Binding 模块,将自定义的 Mapper 接口与映射配置文件关联绑定。
2.3.10 注解模块
package : org.apache.ibatis.annotations
存放 Mybatis 自定义的注解,例如,@Select,@Mapper 等。
2.3.11 异常模块
package : org.apache.ibatis.exceptions
定义 MyBatis 专有的异常。以及异常信息生成工具。
3.总结
本文总结了 MyBatis 整体架构以及其相应模块的功能以及所属包,总体对MyBatis的源码有个大概的了解,后续将按功能模块 具体分析学习 其核心源码~