mybatisplus本地缓存 SQL 解析
时间: 2025-02-01 22:49:04 浏览: 45
### MyBatisPlus 本地缓存 SQL 解析原理
MyBatisPlus 是基于 MyBatis 的增强工具,在简化开发的同时也优化了性能。对于 SQL 缓存机制,MyBatis 自身已经具备了一级和二级缓存功能[^1]。
#### 一级缓存
当执行相同 Mapper 接口下的操作时,如果两次查询之间没有发生任何提交或回滚事务的操作,则第二次查询会优先从一级缓存中读取数据而不是再次访问数据库。这种缓存默认开启且作用范围仅限于同一个 SqlSession 实例内。
#### 二级缓存
不同于一级缓存的作用域局限性,二级缓存可以跨多个 SqlSession 使用。它通过配置文件来启用并指定相应的命名空间(即具体的 Mapper 文件)。一旦启用了某个 Mapper 的二级缓存属性,默认情况下该 Mapper 下的所有增删改查都会被纳入全局共享的缓存管理之中。需要注意的是,为了使二级缓存生效,还需要确保实体类实现了序列化接口 `Serializable` 或者自定义序列化策略。
然而,关于 **MyBatisPlus 特有的本地缓存 SQL 解析机制** ,实际上并没有独立的一套新的缓存体系;而是沿用了 MyBatis 原生的支持,并在此基础上进行了扩展性的封装与优化:
- 在应用启动阶段,MyBatisPlus 就会对各个 XxxMapper 中的方法进行扫描分析,并提前准备好对应的 SQL 文本,这些预编译好的 SQL 被保存到了 Configuration 对象里的 MappedStatement 集合里待命调用[^2]。
- 当涉及到动态 SQL 场景下,比如使用 Wrapper 来构建复杂查询条件的时候,框架内部同样遵循类似的流程——先根据传入参数组装成最终版 SQL 表达式再交给底层去执行。而这个过程中所涉及的具体细节已经在之前的文章中有过介绍[^4]。
因此可以说,MyBatisPlus 所谓 “本地缓存”的概念更多体现在对 SQL 模板以及映射关系的预先加载上,而非传统意义上的运行期间临时创建的数据缓冲区。至于实际执行层面的缓存控制依然依赖于 MyBatis 提供的基础架构及其配置选项。
```java
// 示例代码展示如何利用 MyBatisPlus 进行批量删除操作
@Test
public void removeByIds_T(){
// 利用 BaseMapper 的 deleteBatchIds 方法完成多记录移除任务
boolean result = iStudentService.removeByIds(
Stream.of(1065, 1064, 1063, 1062)
.collect(Collectors.toList())
);
System.out.println(result);
}
```
阅读全文
相关推荐


















