Appearance
MyBatis 知识体系
MyBatis 是一款优秀的半自动持久层框架,它通过 XML 或注解将 SQL 与 Java 对象映射,让你能自由编写 SQL 的同时享受 ORM 的便利。相比 Hibernate 的全自动映射,MyBatis 更灵活、更轻量,是互联网公司最主流的数据库访问框架。
为什么选择 MyBatis?
JDBC 的痛点:
① 重复代码:每次都要获取连接、创建 Statement、处理 ResultSet、关闭资源
② 硬编码 SQL:SQL 写在 Java 代码里,修改需要重新编译
③ 结果集映射繁琐:手动从 ResultSet 取值、类型转换、封装对象
④ 连接管理复杂:手动管理数据库连接,容易泄露
MyBatis 的解决:
① SQL 与 Java 代码分离 → XML 或注解配置 SQL
② 自动映射 → 结果集自动映射到 Java 对象
③ 连接池 → 内置连接池,自动管理连接生命周期
④ 动态 SQL → 根据条件动态拼接 SQL,告别 SQL 拼接地狱知识体系全景
MyBatis 学习路线(从浅到深):
入门篇 ─────────────────────────────────────────────────────
│ ① 概述与架构 → 理解 MyBatis 是什么、怎么工作的
│ ② 快速入门 → 搭建第一个 MyBatis 项目
│ ③ 核心配置文件 → mybatis-config.xml 全部配置项
│ ④ Mapper 映射文件 → CRUD、参数传递、SQL 片段
└──────────────────────────────────────────────────────────
进阶篇 ─────────────────────────────────────────────────────
│ ⑤ 动态 SQL → if/choose/trim/foreach,告别拼接
│ ⑥ 结果映射 → resultMap、关联查询、嵌套映射
│ ⑦ 缓存机制 → 一级缓存、二级缓存、自定义缓存
└──────────────────────────────────────────────────────────
高级篇 ─────────────────────────────────────────────────────
│ ⑧ 插件机制 → 拦截器原理、PageHelper 分页原理
│ ⑨ Spring Boot 集成 → mybatis-spring-boot-starter
│ ⑩ 高级特性 → TypeHandler、枚举、批量、存储过程
└──────────────────────────────────────────────────────────
源码篇 ─────────────────────────────────────────────────────
│ ⑪ 源码分析 → SqlSession、Executor、MapperProxy
│ ⑫ 最佳实践 → N+1 问题、性能优化、常见坑
└──────────────────────────────────────────────────────────速记口诀
MyBatis 核心四组件:
SqlSessionFactory → 工厂造会话
SqlSession → 会话发 SQL
Mapper → 接口映射 SQL
Executor → 执行器干活
配置三件套:
mybatis-config.xml → 全局配置
Mapper.xml → SQL 映射
Mapper.java → 接口绑定
执行流程:
接口调用 → 动态代理 → 找 SQL → 参数绑定 → 执行 → 结果映射 → 返回对象MyBatis vs Hibernate vs JPA
| 维度 | MyBatis | Hibernate/JPA |
|---|---|---|
| 类型 | 半自动 ORM | 全自动 ORM |
| SQL 控制 | 手写 SQL | 自动生成 SQL |
| 学习成本 | 低 | 高 |
| 灵活性 | 高 | 低 |
| 性能调优 | 直接优化 SQL | 优化 HQL/JPQL |
| 适用场景 | 复杂查询、报表 | 常规 CRUD |
| 动态 SQL | 强大 | 较弱 |
| 缓存 | 两级缓存 | 三级缓存 |
文档导航
| 章节 | 内容 | 难度 |
|---|---|---|
| 01-概述与架构 | 架构设计、核心组件、工作流程 | 入门 |
| 02-快速入门 | 环境搭建、第一个 Demo | 入门 |
| 03-核心配置文件 | 配置项详解、别名、环境 | 入门 |
| 04-Mapper映射文件 | CRUD、参数、SQL 片段 | 入门 |
| 05-动态SQL | if/choose/trim/foreach/bind | 进阶 |
| 06-结果映射 | resultMap、关联、嵌套 | 进阶 |
| 07-缓存机制 | 一级/二级缓存、自定义缓存 | 进阶 |
| 08-插件机制 | 拦截器、PageHelper 原理 | 高级 |
| 09-SpringBoot集成 | Starter、自动配置、事务 | 高级 |
| 10-高级特性 | TypeHandler、枚举、批量 | 高级 |
| 11-源码分析 | 核心组件源码解读 | 源码 |
| 12-最佳实践 | 性能优化、常见坑 | 实战 |
