MyBatis 提供了两级缓存机制来提高数据访问的效率。
-
一级缓存(本地缓存/Session级缓存):
- 作用:一级缓存是MyBatis自带的,存在于SqlSession级别的缓存。当一个SqlSession执行某条SQL查询语句时,MyBatis会将查询结果存储在这个SqlSession的一级缓存中。如果接下来有相同的SQL查询请求(在同一个SqlSession内),MyBatis会直接从一级缓存中返回结果,而不需要再次查询数据库,从而提高了查询效率。
- 生命周期:一级缓存的生命周期与SqlSession相同,即从SqlSession创建到关闭。一旦SqlSession关闭,该缓存中的数据就会被清空。
-
二级缓存(全局缓存/应用级缓存):
- 作用:二级缓存是跨SqlSession的缓存,它可以被所有SqlSession共享。当开启二级缓存后,MyBatis会在应用程序级别创建一个全局的缓存区域,用于存放多个SqlSession中可能重复使用的数据。这意味着,即使SqlSession关闭,只要数据没有改变,其他SqlSession依然可以从二级缓存中获取数据,避免了重复的数据库查询操作。
- 配置与管理:二级缓存需要手动配置,并且不是所有情况都适用。它对数据的更新和同步要求较高,通常需要确保数据的一致性。因此,使用二级缓存时,需要考虑实体类是否实现了序列化接口,以及如何处理缓存的刷新策略(如基于时间、基于SQL更新等)。
- 生命周期:二级缓存的生命周期与整个应用的生命周期相同,直到应用关闭或显式清除。
总结来说,一级缓存主要用于单个SqlSession内的查询优化,而二级缓存则是在更广泛的范围内,为不同SqlSession间提供数据共享,以进一步提升系统性能。正确使用这两级缓存可以显著减少数据库的访问压力,提升系统的响应速度。