MyBatis 面试题, 说说 MyBatis 的缓存机制?
MyBatis 面试题, 说说 MyBatis 的缓存机制?
QA
Step 1
Q:: 说说 MyBatis 的缓存机制?
A:: MyBatis 提供了一级缓存和二级缓存。一级缓存是 SqlSession 级别的缓存,默认开启,缓存范围是同一个 SqlSession 中执行的相同 SQL 语句。二级缓存是 Mapper 映射级别的缓存,作用范围是同一个命名空间下的 Mapper,可以跨 SqlSession 使用,需要手动配置开启。一级缓存的生命周期是 SqlSession 的生命周期,而二级缓存的生命周期则与 SqlSession 无关。一级缓存的数据会在 SqlSession 关闭或提交时被清空,而二级缓存则是持久化的,可以在多个 SqlSession 中共享。MyBatis 的缓存机制有助于提高查询效率,减少数据库访问的频率。
Step 2
Q:: MyBatis 的一级缓存与二级缓存有何不同?
A:: MyBatis 的一级缓存是 SqlSession 级别的缓存,默认开启,缓存范围仅限于当前 SqlSession 内,相同 SQL 执行多次只会查询一次数据库,之后都直接从缓存中获取数据。一级缓存生命周期与 SqlSession 相同,当 SqlSession 被关闭或者提交时,一级缓存就会被清空。二级缓存是 Mapper 映射级别的缓存,可以跨 SqlSession 共享,默认情况下是关闭的,需要在配置文件中手动配置开启。二级缓存的数据会在多次 SqlSession 中共享,生命周期更长,但需要开发者注意数据的一致性问题。
Step 3
Q:: 如何开启 MyBatis 的二级缓存?
A:: 要开启 MyBatis 的二级缓存,首先需要在 MyBatis 的配置文件中开启全局二级缓存配置。其次,需要在每个需要使用二级缓存的 Mapper 接口对应的 XML 文件中,通过 <cache />
标签来开启二级缓存。同时,为了确保二级缓存的正确使用,还需要实现 Serializable 接口,以保证缓存对象的序列化。
Step 4
Q:: MyBatis 缓存机制的优缺点是什么?
A:: MyBatis 的缓存机制的优点在于减少了数据库的访问次数,从而提升了系统的性能,特别是在读操作频繁的场景中效果显著。一级缓存的优势在于简单易用,默认开启,而二级缓存则可以跨 SqlSession 共享,进一步提升缓存命中率。缺点方面,二级缓存如果使用不当,可能会导致数据不一致的问题,特别是在有数据更新的情况下。此外,缓存机制会增加系统的复杂度,开发者需要仔细权衡缓存的使用场景。