简介:MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通老式 Java 对象)映射成数据库中的记录。MyBatis 的缓存是其核心特性之一,用于提高应用程序的性能。本文将详细解析 MyBatis 的缓存机制。
一、MyBatis 缓存概述
MyBatis 缓存是指 MyBatis 在执行 SQL 查询时,将查询结果存储在缓存中,以便后续相同的查询可以直接从缓存中获取结果,从而提高性能。MyBatis 的缓存可以分为一级缓存和二级缓存。一级缓存是基于 SqlSession 的,而二级缓存是基于 Mapper 的。
二、一级缓存
一级缓存是默认开启的,并且是基于 SqlSession 的。当执行查询操作时,MyBatis 会将查询结果存储在 SqlSession 的本地缓存中。如果执行相同的查询,MyBatis 会首先检查 SqlSession 本地缓存中是否有结果,如果有则直接返回,否则会执行 SQL 查询并更新本地缓存。
三、二级缓存
二级缓存是跨 SqlSession 的,可以在不同的 SqlSession 之间共享数据。要使用二级缓存,需要在 MyBatis 的配置文件中开启二级缓存的支持,并在 Mapper 接口中添加相应的注解或 XML 配置。当执行查询操作时,MyBatis 会将查询结果存储在二级缓存中,其他 SqlSession 可以通过相同的 Mapper 接口来获取共享的数据。
四、缓存策略
MyBatis 的缓存策略包括以下几种: