1.5 调用链分层架构 - mybatis源码学习

分层架构

架构大致可以分为五个层级,为
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 调用

输出:与数据库的网络交互

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值