深入剖析MyBatis缓存机制:原理、源码与实战指南
引言
MyBatis作为一款优秀的ORM框架,其缓存机制能显著提升数据库查询性能。但许多开发者仅停留在“知道有缓存”的层面,对其实现原理和细节知之甚少。本文将结合可运行的代码示例和源码分析,手把手带您彻底掌握MyBatis缓存机制。
一、MyBatis缓存分类
MyBatis提供两级缓存:
-
一级缓存(Session级缓存):默认开启,作用于SqlSession生命周期
-
二级缓存(Application级缓存):需手动配置,作用于Mapper命名空间
二、一级缓存实战与原理
代码示例
// 测试一级缓存
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
// 第一次查询(访问数据库)
User user1 = mapper.selectById(1);
// 第二次查询(命中缓存)
User user2 = mapper.selectById(1);
System.out.println(user1 == user2); // 输出true
}
源码解析
-
存储位置:
BaseExecutor
中的PerpetualCache
&