Mybatis 核心原理 专栏导览

专栏定位

本专栏聚焦 Mybatis 持久层框架的核心原理——从 SQL 映射到结果集处理,从动态 SQL 解析到插件拦截链,从一级缓存的隐蔽陷阱到与 Spring 的深度整合。Mybatis 是 Java 生态中最主流的半自动 ORM 框架——它不像 Hibernate 那样完全屏蔽 SQL,而是让开发者保持对 SQL 的完全控制,同时提供了参数映射、结果映射、动态 SQL 等便利能力。

理解 Mybatis 的内部机制不仅有助于排查”缓存脏读”、“N+1 查询”、“类型转换异常”等生产问题,更能帮助你在复杂业务场景下(分页、多数据源、审计日志)通过插件机制优雅地扩展框架能力。

目标读者

  • 日常使用 Mybatis 但希望理解其内部运作的后端工程师
  • 需要编写自定义插件(分页/SQL 审计/多租户)的技术负责人
  • 对 ORM 框架设计模式感兴趣的技术爱好者

专栏目录

序号标题核心内容
0101 Mybatis 全局架构——从 SQL 到结果映射的完整链路Mybatis 的四层架构(接口层/数据处理层/框架支撑层/引导层)、Configuration 全局配置对象、一条 SQL 的完整执行链路(Mapper → SqlSession → Executor → StatementHandler → JDBC)
0202 SqlSession 与 Executor——命令执行的核心引擎SqlSession 的 API 设计与 DefaultSqlSession 实现、三种 Executor(Simple/Reuse/Batch)的差异与适用场景、Executor 的装饰器模式(CachingExecutor 包装)
0303 动态 SQL——OGNL 表达式与 SqlNode 解析树动态 SQL 标签(if/choose/where/foreach/trim/set)的解析、SqlNode 接口与组合模式、OGNL 表达式引擎的工作原理、TextSqlNode 的 ${} 替换 vs StaticTextSqlNode 的 #{} 占位、SQL 注入风险分析
0404 参数处理——ParameterHandler 与 TypeHandler 的类型映射参数解析(@Param 注解 vs 单参数 vs Map)、DefaultParameterHandler 的参数设置流程、TypeHandler 的注册与查找机制、自定义 TypeHandler 的编写(JSON 字段/枚举映射/加密字段)、TypeHandlerRegistry 的层次匹配
0505 结果映射——ResultMap 的嵌套映射与延迟加载ResultSetHandler 的三种处理模式、ResultMap 的 id/result/association/collection 映射、嵌套查询(N+1 问题)vs 嵌套结果映射(JOIN 查询)、延迟加载的 CGLIB 代理实现、autoMapping 的自动映射规则
0606 一级缓存与二级缓存——命中条件、失效场景与生产陷阱一级缓存的 SqlSession 级作用域、PerpetualCache 的 HashMap 实现、一级缓存的命中条件(statementId + 参数 + RowBounds + SQL)、一级缓存在 Spring 中的”失效假象”、二级缓存的 namespace 级作用域、CachingExecutor 的查询拦截、二级缓存的脏读风险与关联表失效
0707 插件机制——Interceptor 的责任链模式与分页插件原理Plugin 类的 JDK 动态代理实现、InterceptorChain 的责任链包装、四大拦截点(Executor/StatementHandler/ParameterHandler/ResultSetHandler)、PageHelper 分页插件的拦截原理(改写 SQL + 查询 COUNT)、自定义 SQL 审计插件实战
0808 Mapper 接口的代理实现——MapperProxy 与 MapperMethodMapperProxyFactory 的动态代理、MapperProxy 的 InvocationHandler 实现、MapperMethod 的 SqlCommand + MethodSignature 解析、方法签名到 SqlSession API 的映射规则、接口默认方法(default method)的处理
0909 Mybatis-Spring 整合原理——SqlSessionTemplate 与事务管理SqlSessionFactoryBean 的 Configuration 构建、MapperScannerConfigurer 的 BeanDefinition 扫描注册、SqlSessionTemplate 的线程安全代理(SqlSessionInterceptor)、Spring 事务与 Mybatis SqlSession 的绑定(TransactionSynchronizationManager)、@MapperScan 的实现原理
1010 Mybatis-Plus 与代码生成——约定优于配置的实践Mybatis-Plus 的 BaseMapper 通用 CRUD、Wrapper 条件构造器的链式 API、自动填充(MetaObjectHandler)、乐观锁插件(@Version)、逻辑删除、多租户插件、代码生成器的模板引擎(Velocity/Freemarker)

推荐阅读路径

核心原理路径:01 → 02 → 03 → 04 → 05

缓存与性能路径:06 → 07

扩展与整合路径:08 → 09 → 10

前置知识

  • Java 基础、JDBC 基本使用
  • 建议先阅读 Spring Core 专栏了解 IoC 容器和 BeanDefinition 注册机制(有助于理解 Mybatis-Spring 整合)
  • 建议了解 OOP 设计模式 中的代理模式、装饰器模式、模板方法模式

关联专栏