当前位置: 首页 > news >正文

【Mytais系列】核心工作流程

MyBatis 的核心工作流程可以分为 配置加载SQL 执行结果映射 三个阶段,以下是详细流程说明(配合时序图理解):


一、核心工作流程时序图

二、核心流程分步说明

1. 配置加载阶段
  • 输入mybatis-config.xml(全局配置) + Mapper.xml(SQL映射文件)
  • 关键动作
    • SqlSessionFactoryBuilder:解析 XML 配置,构建 Configuration 对象(包含数据源、事务、Mapper 注册等信息)
    • SqlSessionFactory:基于 Configuration 创建工厂,生命周期为应用级(单例)
2. SQL 执行阶段

步骤

角色

核心职责

SqlSession

提供 CRUD API,通过 getMapper() 创建 MapperProxy(动态代理对象)

MapperProxy

拦截接口方法调用,将方法名映射为 SQL 语句的唯一ID(namespace.id)

Executor

调度执行器(默认SimpleExecutor),管理一级缓存和事务

StatementHandler

创建 PreparedStatement,通过 ParameterHandler 处理参数

ParameterHandler

将 Java 对象转换为 JDBC 参数(使用 TypeHandler)

3. 结果处理阶段

步骤

角色

核心职责

ResultSetHandler

将 ResultSet 转换为 Java 对象(通过 ResultMap 和 TypeHandler)

Executor

处理二级缓存(若开启),返回结果给调用方

SqlSession

提交/回滚事务(非自动提交时),关闭资源


三、关键机制详解

1. 动态代理机制
  • MapperProxy:通过 JDK 动态代理将接口方法调用转换为 SqlSession 的 CRUD 操作
  • 映射绑定:通过 namespace + methodName 关联到 Mapper.xml 中的 SQL 定义
2. 插件拦截链
// 插件通过拦截器链增强核心组件
Executor → StatementHandler → ParameterHandler → ResultSetHandler
3. 缓存机制

缓存级别

作用范围

生命周期

开启方式

一级缓存

SqlSession 内

会话级(默认开启)

自动管理

二级缓存

Mapper 级别

应用级

需在 Mapper.xml 中配置 <cache/>


四、流程特点总结

  1. 解耦设计:将 SQL 与 Java 代码分离,通过 XML/注解配置实现松耦合
  2. 动态代理:通过接口绑定实现无实现类的 DAO 操作
  3. 可扩展性:插件机制可拦截四大核心组件(Executor/StatementHandler等)
  4. 灵活映射:通过 ResultMap 实现复杂结果集到对象的映射
  5. 资源管理:自动管理 JDBC 连接/事务的获取与释放

通过这个流程设计,MyBatis 在保持灵活性的同时,提供了比原生 JDBC 更高效、更易维护的数据库操作方案。

http://www.xdnf.cn/news/270973.html

相关文章:

  • C++类_移动构造函数
  • <init-param>和<load-on-startup>的作用
  • 重新构想E-E-A-T:提升销售与搜索可见性的SEO策略
  • 如何优化MySQL主从复制的性能?
  • 【电路笔记】-自耦变压器
  • c++ 函数参数传递
  • 推理能力:五一模型大放送
  • 硬件零基础入门(尚硅谷)
  • JavaScript中的AES加密与解密:原理、代码与实战
  • Day04 新增套餐
  • 双指针算法详解(含力扣和蓝桥杯例题)
  • 王道考研数据结构课后题代码题(2026版)——排序部分
  • 第5章 Python 基本数据类型详解(int, float, bool, str)
  • 融智学16字方针无歧义表述并构建人机协同的非零和博弈模型
  • systemd-notify(linux服务状态通知消息)
  • 视频编解码学习一之相关学科
  • Java框架“若依RuoYi”前后端分离部署
  • 2025年最新嵌入式开发STM32单片机详细教程(更新中)
  • GTS-400 系列运动控制器板(十四)----软限位使用
  • 多元随机变量协方差矩阵
  • 62常用控件_QDial的使用
  • Learning vtkjs之PolyDataNormals
  • Spring MVC注解式控制器开发
  • 计算方法实验五 插值多项式的求法
  • java 洛谷题单【算法2-2】常见优化技巧
  • 纯Java实现STDIO通信的MCP Server与客户端验证
  • 【Java】2025 年 Java 学习路线:从入门到精通
  • 【进阶】C# 委托(Delegate)知识点总结归纳
  • Spring事务管理
  • [计算机网络]数据链路层