mybatis核心架构为三层协作:配置层(sqlsessionfactorybuilder生成sqlsessionfactory)、接口层(sqlsession通过mapper动态代理转发请求)、执行层(executor调度四大对象完成sql执行);四大对象职责清晰——sqlsession是门面,executor是总指挥(管缓存、事务、调度),statementhandler负责jdbc操作,parameterhandler处理参数绑定,resultsethandler完成结果映射。

核心架构:三层分工 + 一次查询的完整链路
MyBatis 的整体结构可以理解为「配置层 → 接口层 → 执行层」三层协作:
- 配置层:以 SqlSessionFactoryBuilder 加载 mybatis-config.xml 和 Mapper XML/注解,生成不可变的 SqlSessionFactory —— 它是整个应用的入口,类似数据库连接池的工厂。
- 接口层:开发者面向 Mapper 接口 编程,不写实现类;SqlSession 负责通过动态代理把接口方法调用,转成对 SQL 的执行请求。
- 执行层:真正干活的是 Executor(执行器),它拿着 MappedStatement(封装了SQL、参数映射、结果映射等元信息)去操作数据库,并用 ResultHandler 处理返回结果,最终组装成 Java 对象。
举个例子:调用 userMapper.selectById(100),实际是 SqlSession 委托 Executor,根据 MappedStatement 中预编译的 SQL 和 #{} 参数绑定,查出 ResultSet,再由 ResultHandler 按 ResultMap 规则映射成 User 对象。
四大核心对象:作用明确、职责单一
这四个对象不是并列关系,而是有清晰调用链路的协作单元:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- SqlSession:轻量级会话对象,非线程安全,生命周期应限于一次请求或一个事务。它提供 select/update/insert/delete 等方法,是开发者接触最多、但内部不直接执行 SQL 的“门面”。
- Executor:SqlSession 的执行引擎,负责 SQL 解析、缓存管理(一级/二级)、事务控制、Statement 创建与执行。常见实现有 SimpleExecutor、ReuseExecutor、BatchExecutor,可通过配置切换。
-
MappedStatement:每个 、
标签或 @Select 注解,在启动时都会被解析成一个 MappedStatement 实例。它像一张“SQL说明书”,包含 id、SQL 源、参数类型、结果映射规则、缓存配置等全部元数据。 - ResultHandler:结果处理器,用于自定义结果集处理逻辑。默认由 DefaultResultHandler 将 ResultSet 映射为 List 或单个对象;也可传入自定义 ResultHandler 实现流式处理、分页截断或异步收集等场景。
对比 JDBC,能体现设计意图
把 MyBatis 四大对象和 JDBC 四要素对照着说,面试官立刻get到它的演进逻辑:
- SqlSession ≈ Connection(会话上下文)
- Executor ≈ PreparedStatement(执行计划+预编译+复用)
- MappedStatement ≈ SQL 字符串 + 参数元信息(比纯 String 更结构化)
- ResultHandler ≈ ResultSet + 手动 while(rs.next()) 映射逻辑的封装
本质是把 JDBC 中分散的手动操作(注册驱动、获取连接、设参、遍历结果),封装成可配置、可扩展、可代理的对象体系,既保留 SQL 控制权,又消除模板代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










