MyBatis StatementHandler 深度解析:数据库交互的核心执行者
StatementHandler 是 MyBatis 中直接与数据库交互的核心接口,负责管理 JDBC 的 Statement 对象(Statement/PreparedStatement/CallableStatement),协调 ParameterHandler(参数设置)和 ResultSetHandler(结果映射),完成 “SQL 预编译→参数绑定→SQL 执行→结果处理” 的全流程。从 “接口定位→架构设计→核心实现→调用链路” 四个维度,彻底拆解 StatementHandler 的工作机制,并揭示其背后的设计模式。
StatementHandler 核心定位与接口规范
核心职责
StatementHandler 是 MyBatis 与数据库交互的 “最后一公里”,核心职责可概括为 5 点:
- 创建 Statement 对象:根据 SQL 类型(无参数 / 预编译 / 存储过程)创建对应的 JDBC
Statement; - SQL 预编译:对预编译 SQL(
PreparedStatement)进行编译,提升执行效率; - 参数绑定:委托
ParameterHandler为 SQL 占位符(?)设置参数; - SQL 执行:执行
select/insert/update/delete及批量操作; - 结果转发:将执行结果(
ResultSet)委托ResultSetHandler映射为 Java 对象。
接口定义:核心方法规范
StatementHandler 接口定义了数据库交互的标准方法,所有实现类需遵循该规范:
1 | public interface StatementHandler { |
架构设计:接口 + 抽象基类 + 具体实现(模板方法 + 策略模式)
MyBatis 对 StatementHandler 的实现采用 “接口定义规范 + 抽象基类封装通用逻辑 + 具体类实现差异化功能” 的架构,并通过 模板方法模式(抽象基类)和 策略模式(路由类)降低耦合,提升扩展性。