打好基础
7 组 · 29 篇MyBatis 概述与环境搭建
4 篇核心配置文件
5 篇configuration 元素结构
掌握 mybatis-config.xml 根元素结构和子元素顺序规则,理解 MyBatis 配置文件的完整组织形式。
environments 数据源配置
掌握 MyBatis 多环境数据源配置,包括连接池、事务管理和开发/测试/生产环境切换。
properties 属性文件
掌握使用 db.properties 外部化数据库配置,实现配置与代码分离,支持多环境管理和敏感信息加密。
settings 全局设置
掌握 MyBatis settings 全局配置,包括缓存、懒加载、驼峰映射、日志等核心参数的含义和使用场景。
typeAliases 类型别名
掌握 MyBatis 类型别名配置,包括内置别名、自定义别名和包扫描,简化 Mapper XML 中的类型引用。
SQL 映射文件基础
5 篇mapper 根元素
理解 XML 映射文件结构、namespace 命名空间的作用与配置规则。
select 查询语句
编写查询语句,配置 resultType、resultMap、parameterType 等核心属性。
insert 插入语句
执行插入操作,获取自增主键、使用 useGeneratedKeys 与 keyProperty 配置。
update 更新语句
编写更新语句,处理动态字段更新场景,使用 set 标签与 if 条件。
delete 删除语句
执行删除操作,理解影响行数返回值与软删除实现。
参数传递与结果映射
5 篇接口绑定与动态代理
3 篇基本 CRUD 实战
4 篇核心能力
9 组 · 43 篇动态 SQL
8 篇if 条件判断
if 标签根据 test 属性中的 OGNL 表达式决定是否包含 SQL 片段,是动态 SQL 最基础的条件判断标签,广泛用于可选查询条件、字段过滤等场景。
choose-when-otherwise 分支
choose-when-otherwise 提供类似 Java switch 的多分支选择逻辑,按顺序匹配 when 条件,仅执行第一个为 true 的分支,otherwise 作为默认兜底。
where 智能条件
where 标签自动处理 WHERE 关键字的添加与移除,智能去除首个多余的 AND 或 OR 前缀,简化动态条件拼接,避免手动处理边界情况。
set 更新字段
set 标签智能处理 UPDATE 语句中的 SET 关键字和多余逗号,支持选择性字段更新,避免全量覆盖,提升更新操作的灵活性和安全性。
foreach 循环遍历
foreach 标签用于遍历集合、数组、Map 等数据结构,通过 collection、item、open、close、separator 等属性动态生成 IN 查询、批量 INSERT、多条件拼接等 SQL 片段。
trim 自定义裁剪
trim 标签提供灵活的 SQL 前缀/后缀控制能力,通过 prefix、suffix、prefixOverrides、suffixOverrides 四个属性实现复杂动态 SQL 场景的精确裁剪。
sql 片段复用
通过 `<sql>` 标签提取公共 SQL 片段,配合 `<include>` 标签实现列定义、WHERE 条件、JOIN 语句的跨 Statement 复用,减少冗余和维护成本。
bind 变量绑定
bind 标签在动态 SQL 中创建新变量,支持 OGNL 表达式拼接,常用于模糊查询、大小写转换、兼容性适配等场景,减少数据库函数依赖。
高级结果映射
6 篇一对一关联映射
介绍 MyBatis association 元素配置一对一关联查询,支持嵌套结果映射和子查询两种方式,对比 join 与 subquery 差异。
一对多集合映射
介绍 MyBatis collection 元素配置一对多关联查询,支持嵌套结果映射和子查询,详解 ofType 属性的使用。
多对多关联查询
介绍 MyBatis 通过中间表实现多对多关系映射,使用多个 collection 嵌套实现双向关联,详解 JOIN 和子查询两种方案。
嵌套查询与 N+1 问题
介绍 MyBatis 嵌套查询原理,分析 N+1 问题成因,提供 fetchType 懒加载、批量查询和 JOIN 优化方案。
延迟加载配置
介绍 MyBatis 延迟加载配置方法,包括全局开关、fetchType 局部控制、lazyLoadTriggerMethods 触发策略及相关注意事项。
discriminator 鉴别器
介绍 MyBatis discriminator 鉴别器的用法,根据列值动态选择 resultMap 映射规则,支持 inheritance 继承映射。
缓存机制
5 篇一级缓存机制
理解 Session 级别缓存原理,掌握缓存命中条件、失效场景与 local cache scope 配置。
二级缓存配置
掌握 namespace 级别缓存的启用方式,配置 eviction、flushInterval、size 等核心参数。
缓存读写策略
配置 readOnly 和 serialize 避免并发问题与脏读,理解缓存穿透的场景与防御策略。
自定义缓存实现
实现 Cache 接口集成 Redis、Ehcache 等第三方缓存,掌握分布式缓存的实现模式。
缓存脏数据处理
理解多表关联更新导致缓存不一致的根因,掌握 flushCache、cache-ref 等解决方案。
插件机制
4 篇插件拦截原理
深入理解 MyBatis 四大核心拦截对象(Executor/StatementHandler/ParameterHandler/ResultSetHandler),掌握拦截链、代理机制与插件编写原理。
Interceptor 接口实现
掌握 MyBatis Interceptor 接口的三个核心方法,使用 @Intercepts/@Signature 注解声明拦截点,编写完整插件并配置属性参数。
分页插件原理
深入理解 MyBatis 分页插件的拦截机制,实现物理分页的 SQL 改写(LIMIT/OFFSET),支持多数据库方言,优化 COUNT 查询性能。
性能监控插件
实现 MyBatis SQL 执行拦截器,记录执行时间,识别慢查询,收集性能指标,助力数据库性能分析与优化。
TypeHandler 自定义类型处理器
4 篇TypeHandler 接口
掌握 MyBatis TypeHandler 接口定义与核心方法,理解参数设置与结果读取两个方向的类型转换机制,了解内置 TypeHandler 体系。
枚举类型处理
掌握 MyBatis 内置的两种枚举 TypeHandler(EnumTypeHandler 与 EnumOrdinalTypeHandler),学会编写自定义枚举处理器实现 code/name 映射。
JSON 类型处理
掌握 MyBatis 中 JSON 类型字段与 Java 对象的双向转换,实现基于 Jackson/Gson 的通用 JSON TypeHandler,并学习 PostgreSQL JSONB 类型的处理方法。
枚举字段映射
掌握 MyBatis 中数据库枚举字段到 Java 枚举的映射方式,包括 resultMap 字段级指定、全局注册、注解配置和 null 值处理策略。
批量操作与性能优化
4 篇存储过程与高级查询
4 篇注解开发
4 篇@Select 等基础注解
使用 @Select / @Insert / @Update / @Delete 注解直接编写 CRUD 语句,替代 XML Mapper 文件,适用于简单查询场景。
@Results 结果映射
使用 @Results / @Result / @ResultMap 注解配置结果集映射,替代 XML 中的 <resultMap>,处理列名与属性名不一致及复杂类型映射。
@One 与 @Many 关联
使用 @One 和 @Many 注解实现一对一和一对多关联查询,掌握 select 属性子查询调用与 column 属性列映射传参。
@SelectProvider 动态 SQL
使用 @SelectProvider 等 Provider 注解通过 Java 类动态生成 SQL,掌握 Builder 模式构建条件 SQL,替代 XML 动态 SQL 标签。
与 Spring 集成
4 篇Spring-MyBatis 集成
讲解 SqlSessionFactoryBean、MapperScannerConfigurer 的配置方法,Spring XML 配置方式及 Bean 生命周期管理。
事务管理集成
讲解 Spring 事务管理与 MyBatis 的集成,包括 @Transactional 注解、DataSourceTransactionManager 配置及回滚规则。
Mapper 接口注入
讲解通过 @Autowired 注入 Mapper 代理对象的方法,@MapperScan 注解的使用及接口代理创建原理。
多数据源配置
讲解多 SqlSessionFactory 配置方法、动态数据源路由实现及 AbstractRoutingDataSource 的使用。
高阶实战
7 组 · 35 篇源码架构与核心原理
6 篇SqlSessionFactory 构建流程
深入分析MyBatis从XML配置文件解析到创建SqlSessionFactory的完整流程,涵盖Configuration对象构建、Mapper注册、插件加载等核心环节。
SqlSession 生命周期
深入分析SqlSession从创建到销毁的完整生命周期,涵盖事务提交、回滚、关闭等关键节点,以及线程安全性和连接池管理机制。
Executor 执行器体系
深入分析MyBatis三种Executor执行器的内部实现差异和适用场景,涵盖Simple/Reuse/Batch的执行策略、缓存机制和性能对比。
StatementHandler 语句处理
深入分析StatementHandler如何创建PreparedStatement并设置参数,涵盖RoutingStatementHandler路由机制、三种Statement处理策略及参数绑定流程。
ParameterHandler 参数处理
深入分析ParameterHandler如何将参数对象转换为SQL占位符值,涵盖TypeHandler类型转换机制、参数映射解析和自定义TypeHandler扩展。
ResultSetHandler 结果处理
深入分析ResultSetHandler如何将JDBC ResultSet自动映射为Java对象,涵盖ResultMap解析、自动映射策略、嵌套结果集处理和延迟加载机制。
性能调优实战
5 篇执行计划分析
使用 EXPLAIN 分析 SQL 执行计划,深入解读 type、possible_keys、key、key_len、Extra 等关键字段含义,掌握索引优化策略与执行计划调优方法。
慢查询定位与优化
通过慢查询日志、监控工具和执行计划定位性能瓶颈 SQL,掌握索引创建策略、SQL 改写技巧和 MyBatis 映射优化方法,系统性提升查询性能。
批量操作性能优化
对比 BATCH 执行器与 foreach 方式的性能差异,掌握合理批量大小设置、事务边界控制及内存管理策略,实现高效批量 INSERT/UPDATE 操作。
连接池调优
详解 HikariCP 与 Druid 连接池参数配置,掌握核心池大小、空闲超时、最大等待时间等关键参数的调优策略,平衡并发性能与资源消耗。
缓存策略优化
设计合理的 MyBatis 缓存策略,解决缓存穿透、击穿、雪崩三大问题,掌握一级缓存、二级缓存与分布式缓存的整合方案,提升高频查询性能。
插件开发高级应用
5 篇插件代理链原理
深入分析 Plugin.wrap 如何创建 JDK 动态代理对象形成拦截链,解析 InterceptorChain.pluginAll 的链式构建机制与代理嵌套执行流程。
多插件执行顺序
深入理解多插件配置顺序对拦截链执行的影响,掌握签名匹配、插件叠加、执行顺序控制与依赖关系处理。
分页插件深度定制
实现支持多数据库方言的分页插件,涵盖 SQL 改写、Count 查询优化、分页参数传递与 PageHelper 深度定制方案。
数据脱敏插件
开发透明的数据脱敏插件,通过拦截 ResultSetHandler 在结果集映射阶段自动加密/解密敏感字段,实现存储加密与查询脱敏。
SQL 审计日志插件
通过拦截 StatementHandler 实现 SQL 审计日志插件,记录 SQL 文本、执行时间、参数信息,用于问题排查与合规审计。
多租户与数据权限
4 篇多租户架构设计
深入解析多租户架构的三种模式(独立数据库、独立 Schema、共享数据库),结合 MyBatis 拦截器实现租户自动识别与数据隔离,提供完整的架构设计与落地方案。
数据权限拦截器
基于 JSqlParser 解析 SQL AST,根据用户角色动态注入 WHERE 权限条件,实现部门级、项目级、个人级数据权限过滤,支持拦截器链与自定义权限注解。
动态数据源切换
基于 Spring AbstractRoutingDataSource 实现运行时数据源动态切换,结合 MyBatis 实现读写分离、多数据源路由、租户级数据源隔离,支持事务内数据源一致性。
租户隔离策略
详解三种租户隔离策略:独立数据库(物理隔离)、共享数据库独立 Schema(逻辑隔离)、共享数据库共享 Schema(行级隔离),分析各自的实现方案、安全边界与适用场景。
生产环境最佳实践
5 篇SQL 注入防护
深入理解
线程安全与并发
分析 Mapper 代理对象、SqlSessionFactory 和 SqlSession 的线程安全性,合理配置连接池大小应对并发场景。
异常处理与重试
设计合理的 MyBatis 异常处理策略与数据库连接重试机制,处理超时、死锁等瞬态故障。
热部署与配置刷新
实现 Mapper XML 文件热加载,无需重启应用即可更新 SQL 语句,支持配置动态刷新与灰度发布。
监控与告警
集成 Prometheus 与 Grafana 监控 SQL 执行指标,设置告警阈值,实现数据库性能可观测性。
高级映射与复杂场景
5 篇嵌套结果集映射优化
分析 MyBatis 嵌套结果集映射的性能瓶颈,优化 association 关联查询策略,掌握 columnPrefix 多表别名隔离技巧,提升复杂查询效率。
复杂继承映射
使用 discriminator 鉴别器实现继承关系映射和多态查询,掌握单表/多表/连接表三种继承映射策略,处理复杂类层次结构的数据库映射。
动态表名与列名
使用 ${} 进行动态表名/列名拼接,处理分库分表场景下的路由查询,掌握 SQL 注入防范策略和 MyBatis 拦截器实现方案。
大数据量查询优化
使用流式查询和 ResultHandler 游标处理百万级数据导出与分析,对比传统查询的内存瓶颈,掌握大数据量场景下的性能优化策略。
软删除与逻辑删除
实现全局逻辑删除拦截器自动过滤已删除数据,整合 MyBatis-Plus @TableLogic 注解,对比物理删除与逻辑删除的应用场景,掌握数据恢复与审计策略。
生态工具与扩展
5 篇MyBatis-Plus 集成
掌握 MyBatis-Plus 增强特性,理解 BaseMapper、IService 核心接口,集成代码生成器与条件构造器,提升开发效率。
PageHelper 分页插件
掌握 PageHelper 分页插件的集成使用,理解其基于 ThreadLocal 的分页参数传递与拦截器改写 SQL 的原理,支持多数据库方言。
第三方缓存集成
掌握 MyBatis Cache 接口规范,集成 Redis/Ehcache 等分布式缓存实现二级缓存,理解序列化、缓存穿透与失效策略。
代码生成器定制
掌握 MyBatis Generator 插件开发,自定义代码模板与生成规则,生成符合项目规范的 Entity、Mapper、Service 层代码。
生态工具对比
全面对比 MyBatis 生态中的常用工具(MyBatis Generator、PageHelper、MyBatis-Plus、Plus-Join、mybatis-spring 等),提供选型建议与组合方案。