首页 > 项目 > 当前页面

MyBatis用了哪些设计模式?

2026-06-13 NEW个对象

📌 MyBatis用了哪些设计模式?

1️⃣ 问题背景

MyBatis作为Java生态中非常经典的ORM框架,其核心设计思想并不是“重型封装”,而是强调灵活性 + 可扩展性 + 半自动映射

在源码层面,MyBatis大量使用设计模式来解耦复杂流程,使得SQL执行、参数绑定、结果映射、插件扩展等模块可以独立演进。

理解MyBatis的设计模式,不仅是面试重点,更是理解其架构设计的关键入口。

核心结论:MyBatis通过多种设计模式组合,实现“SQL执行链路的高度解耦”。

2️⃣ 核心原理

MyBatis的执行流程可以简单拆解为:

SQL解析 → 参数绑定 → SQL执行 → 结果映射 → 返回对象

在这个链路中,每一个阶段都对应不同的设计模式进行解耦。

  • 解析阶段:模板方法 + 工厂模式
  • 执行阶段:代理模式 + 策略模式
  • 扩展机制:插件模式(责任链)
  • 对象创建:工厂模式
  • 映射转换:适配器模式

3️⃣ 数据结构分析

MyBatis源码中涉及大量核心对象结构:

对象 作用
Configuration 全局配置中心
SqlSession 执行入口
Executor SQL执行器
MappedStatement SQL映射对象
ResultSetHandler 结果集处理器

这些对象之间通过设计模式进行组合,而不是强耦合调用。


4️⃣ 算法分析(设计模式拆解)

📌 1. 工厂模式(Factory Pattern)

MyBatis中大量对象通过工厂创建,例如:

  • SqlSessionFactory
  • ObjectFactory
  • MapperProxyFactory

作用:统一对象创建逻辑,屏蔽复杂初始化过程。

📌 2. 代理模式(Proxy Pattern)

Mapper接口没有实现类,但却可以直接调用SQL。

本质:JDK动态代理生成Mapper代理对象

执行流程:

Mapper接口 → MapperProxy → SqlSession → Executor

📌 3. 策略模式(Strategy Pattern)

Executor执行器有多种实现:

  • SimpleExecutor
  • ReuseExecutor
  • BatchExecutor

不同场景选择不同执行策略。

📌 4. 模板方法模式(Template Method)

BaseExecutor定义执行流程骨架:

query → cache check → doQuery → resultHandler

子类只需实现核心逻辑。

📌 5. 装饰器模式(Decorator Pattern)

MyBatis的缓存体系使用装饰器层层包装:

  • 一级缓存
  • 二级缓存
  • 装饰缓存(LoggingCache / SynchronizedCache)

📌 6. 责任链模式(Chain of Responsibility)

插件机制(Interceptor)就是典型责任链:

Executor → StatementHandler → ParameterHandler → ResultSetHandler

插件可以插入任意节点进行拦截处理。


5️⃣ 执行流程

SqlSession获取Mapper ↓ JDK动态代理生成MapperProxy ↓ 执行invoke方法 ↓ 解析MappedStatement ↓ 选择Executor策略 ↓ 执行SQL ↓ ResultSetHandler处理结果 ↓ 返回对象

6️⃣ 实际案例

以最常见的UserMapper为例:

  • UserMapper接口没有实现类
  • 运行时由MapperProxy动态生成
  • 调用方法时触发invoke
UserMapper.selectById(1) → MapperProxy.invoke() → SqlSession.selectOne() → Executor.query()

整个过程完全依赖代理模式实现解耦。


7️⃣ 优缺点分析

优点 缺点
高度解耦 学习成本较高
扩展性强 源码复杂
插件机制灵活 性能开销略增

8️⃣ 面试常见问题

MyBatis为什么不用实现类?

因为使用了JDK动态代理模式生成Mapper接口代理对象。

MyBatis插件原理是什么?

基于责任链模式,在Executor/StatementHandler等节点进行拦截。

Executor有哪几种实现?

SimpleExecutor、ReuseExecutor、BatchExecutor。

MyBatis如何实现解耦?

通过工厂模式 + 策略模式 + 模板方法组合实现分层解耦。


9️⃣ 总结

核心结论:MyBatis通过多种设计模式组合实现高度灵活的ORM框架。

关键模式:

  • 代理模式(Mapper接口)
  • 工厂模式(对象创建)
  • 策略模式(Executor)
  • 模板方法(执行流程)
  • 装饰器模式(缓存体系)
  • 责任链模式(插件机制)

本质:用设计模式实现SQL执行链路的全面解耦。

相关文章

  • Kafka消息堆积如何处理?

    Kafka消息堆积如何处理?

    NEW个对象 2026-06-13

  • 从数据结构到算法:RBAC权限系统的完整实现解析

    RBAC(Role-Based Access Control,基于角色的访问控制)是企业级权限系统的主流设计模型。 它通过“用户—角色—权限”的映射关系,将复杂的权限管理问题抽象为结构化的数据模型与可计算的访问控制算法。

    NEW个对象 2026-06-08

  • AI Agent + Git 仓库自动研发流程

    如果把技术文档交给 AI 智能体,然后自动生成代码并提交到代码仓库,那么本质上就是一套 AI Agent + Git 自动化研发流程。

    NEW个对象 2026-06-12

NEW个对象 NEW个对象
JAVA是世界上最好的语言