MyBatis 进阶特性笔记

一、缓存机制

MyBatis 提供二级缓存机制,用于提升查询性能:

缓存级别 作用范围 开启方式 特点
一级缓存 单个 SqlSession(当前事务共享) 默认开启 生命周期与 SqlSession 一致,查询结果自动缓存
二级缓存 多个 SqlSession(所有事务共享) 需手动配置开启 跨 SqlSession 共享,需实体类实现序列化

缓存特性对比

维度 一级缓存 二级缓存
作用域
与数据库距离
访问速度
缓存容量
命中率

二、插件机制

MyBatis 基于拦截器(Interceptor) 实现插件功能,可对以下四大核心对象进行拦截增强:

  • ParameterHandler:参数处理
  • ResultSetHandler:结果集处理
  • StatementHandler:SQL 语句处理
  • Executor:执行器(SQL 执行逻辑)

作用:在 SQL 执行的全生命周期(如参数解析、结果封装、SQL 执行前后)插入自定义逻辑,实现功能扩展(如分页、SQL 监控)。

三、PageHelper 分页插件

PageHelper 是 MyBatis 生态中主流的分页插件,基于 MyBatis 插件机制实现,自动对查询 SQL 进行分页改写。

核心原理

通过拦截 Executor 或 StatementHandler,在 SQL 执行前自动拼接 LIMIT 语句(或数据库方言对应的分页语法)。

分页参数

  • pageNum:当前页码
  • pageSize:每页条数
  • startIndex:分页起始索引(公式:startIndex = (pageNum - 1) * pageSize

四、MyBatisX 逆向生成

MyBatisX 是 IDEA 插件,支持根据数据库表一键生成 MyBatis 开发所需的:

  • 实体类(Entity)
  • Mapper 接口
  • Mapper XML 文件
  • 基础 CRUD 代码

生成步骤

  1. 配置生成选项:
    • module path:模块路径
    • base package:基础包名
    • relative package:实体类 / 接口的相对包路径(如 entitymapper
    • tableName:数据库表名
    • className:生成的类名策略(驼峰或与表名一致)
  2. 选择注解、模板:
    • 注解支持:MyBatis-Plus、JPA 等
    • 模板选择:default-all(生成完整 CRUD 代码)或 default-empty(生成空结构)
    • 可选配置:Lombok 支持、toString/hashCode/equals 方法生成等

五、各特性价值总结

特性 核心价值 适用场景
缓存机制 减少数据库访问,提升查询性能 读多写少的业务场景
插件机制 无侵入扩展 MyBatis 核心流程 分页、SQL 监控、数据脱敏等
PageHelper 分页 简化分页逻辑,自动生成分页 SQL 所有需要分页的查询场景
MyBatisX 逆向生成 自动生成基础 CRUD 代码,提升开发效率 新项目初始化、表结构变更后