分层架构
架构大致可以分为五个层级,为
MapperProxy -> SqlSession -> Executor -> StatementHandler -> JDBC
接口代理层
核心组件:MapperProxy、MapperMethod
职责:通过代理模式把开发者熟悉的接口调用转换为 MyBatis 内部调用
输入:Java 方法调用 cityMapper.findByState("CA")
输出: 对 SqlSession 的方法调用 sqlSession.selectOne(...)
Spring 集成层
核心组件:SqlSessionTemplate, SqlSessionUtils
职责:如果使用纯 mybatis 是没有这一层的,mybatis-spring 包使用 SqlSessionTemplate 作为 SqlSession 的代理类,实现了 SqlSession 的生命周期管理及线程安全,并将其无缝地融入 Spring 的事务管理体系
输入:来自代理层的 SqlSession (SqlSessionTemplate) 调用
输出:一个与当前事务绑定的、真正的 DefaultSqlSession 实例,以及对 Executor 的调用
核心执行层
核心组件:Executor 体系 (CachingExecutor, BaseExecutor, SimpleExecutor 等)
职责:负责调度整个 SQL 执行流程,包括二级缓存和一级缓存的处理、Statement 的创建与管理、以及事务的最终提交或回滚
输入:MappedStatement 和用户参数。
输出:对 StatementHandler 的调用。
语句处理层
核心组件:StatementHandler 体系 (RoutingStatementHandler, PreparedStatementHandler 等) 及 ParameterHandler 和 ResultSetHandler
职责:负责所有具体的、繁琐的 JDBC 操作:创建 PreparedStatement、使用 ParameterHandler 精确地设置参数、执行 SQL,以及使用 ResultSetHandler 将返回的 ResultSet 仔细地映射成 Java 对象。解决了 MyBatis 的内部数据结构与 JDBC API 的转换
输入:Connection 对象、BoundSql
输出:对 JDBC Driver 的调用,以及最终的 Java 对象
JDBC 驱动层
核心组件:数据库厂商提供的 JDBC Driver 实现
职责:与数据库进行物理通信的最终执行者。负责将 SQL 语句和参数通过网络协议发送给数据库服务器,并接收返回的数据流
输入:标准的 JDBC API 调用
输出:与数据库的网络交互
167

被折叠的 条评论
为什么被折叠?



