Mybatis 分为三层架构
- 基础支撑层
- 核心处理层
- 接口层
基础支撑层
类型转换模块
JDBC类型与 Java 类型之间的相互转换、不管是入参还是结果集的转换、都是这个模块职责。
还有一个功能就是类型别名、这个有点类似 Spring 的别名、为了引用的时候名称更加简短
日志模块
Mybatis 的日志模块通过适配器模式可以集成主流的各种日志框架、Log4J、Logback等
反射工具模块
Mybatis 的反射工具、如 MetaObject 提供了一些更加灵活的 API 供我们调用
Binding 模块
生成 Mapper 接口的动态代理对象
数据源模块
也提供了与第三方数据源集成的相关接口
缓存模块
Mybatis 的一级缓存和二级缓存
解释器模块
解释 mybatis-config 和 mapper 配置文件
事务管理模块
MyBatis 对数据库中的事务进行了一层简单的抽象,提供了简单易用的事务接口和实现。
核心处理层
配置解释
依赖解释器模块、对全局配置、mapper 配置、注解配置进行解释
SQL 解释与 scripting 模块
动态SQL 的解释与生成
SQL 执行
Mybatis 执行一条 SQL、涉及到组件有:
Executor、StatementHandler、ParameterHandler 和 ResultSetHandler
Executor 会调用事务管理模块实现事务的相关控制,同时会通过缓存模块管理一级缓存和二级缓存。SQL 语句的真正执行将会由 StatementHandler 实现。那具体是怎么完成的呢?StatementHandler 会先依赖 ParameterHandler 进行 SQL 模板的实参绑定,然后由 java.sql.Statement 对象将 SQL 语句以及绑定好的实参传到数据库执行,从数据库中拿到 ResultSet,最后,由 ResultSetHandler 将 ResultSet 映射成 Java 对象返回给调用方,这就是 SQL 执行模块的核心。
接口层
常用的 SqlSession 接口、SqlSessionFactory 接口等