MyBatis 核心类详解与架构解析:从入门到源码级理解

引言

MyBatis 是一款轻量级的持久层框架,通过灵活的 SQL 映射和高效的执行机制,成为 Java 开发中的热门选择。要深入掌握 MyBatis 的工作原理,理解其核心类及其职责至关重要。本文将带你梳理 MyBatis 的关键类、初始化流程以及它们之间的协作关系,帮助你构建完整的 MyBatis 架构知识体系。


一、MyBatis 核心类概览

MyBatis 的核心类构成了其运行时的骨架,每个类都承担着特定的职责。以下是核心类的层级结构图:

SqlSessionFactoryBuilder
        ↓
SqlSessionFactory (DefaultSqlSessionFactory)
        ↓
SqlSession (DefaultSqlSession)
        ↓
Executor
        ↓
StatementHandler
        ↓
ParameterHandler / TypeHandler / ResultSetHandler

二、关键类职责详解

1. SqlSessionFactoryBuilder

  • 包路径org.apache.ibatis.session.SqlSessionFactoryBuilder
  • 职责
    • 使用建造者模式(Builder Pattern)构建 SqlSessionFactory
    • 通过加载 mybatis-config.xml 配置文件或 Java API 方式创建 Configuration 对象。
  • 特点
    • 是临时对象,通常在应用启动时使用一次后丢弃。

2. SqlSessionFactory

  • 实现类DefaultSqlSessionFactory
  • 包路径org.apache.ibatis.session.SqlSessionFactory
  • 职责
    • 创建 SqlSession 实例。
    • 包含全局唯一的 Configuration 实例,管理 MyBatis 的全局配置(如数据源、事务工厂、插件等)。
  • 特点
    • 线程安全,通常在应用生命周期内只初始化一次。

3. SqlSession

  • 实现类DefaultSqlSession
  • 包路径org.apache.ibatis.session.SqlSession
  • 职责
    • 提供操作数据库的核心 API(如 selectList, insert, update, delete)。
    • 是非线程安全的,每次请求应使用独立的 SqlSession 实例。
  • 底层依赖
    • 通过 Executor 执行 SQL 操作。

4. Executor

  • 实现类SimpleExecutor, ReuseExecutor, BatchExecutor
  • 包路径org.apache.ibatis.executor.Executor
  • 职责
    • SQL 执行引擎的核心,负责 SQL 的实际执行及缓存管理。
    • 支持一级缓存(本地缓存)和二级缓存(跨 SqlSession 缓存)。
  • 特点
    • 可通过拦截器(Interceptor)扩展功能(如分页、日志记录)。

5. MappedStatement

  • 包路径org.apache.ibatis.mapping.MappedStatement
  • 职责
    • 封装一条 SQL 映射信息,包括 SQL 语句、参数类型、结果映射等。
    • 每个 XML 中的