MyBatis 提供了两级缓存(Local Cache 和 Second Level Cache)来满足不同的需求。
1、Local Cache(本地缓存、一级缓存):
● Local Cache 是指在 SqlSession 范围内的缓存,它默认开启并且无法关闭。
● 在同一个 SqlSession 中,当执行相同的查询语句(包括参数相同)时,如果之前已经查询过相同的结果,那么会直接从本地缓存中获取数据,而不会再发送 SQL 查询到数据库。
● Local Cache 是基于 HashMap 实现的,它仅在当前 SqlSession 中有效,并且对于不同的 SqlSession 是隔离的。
2、Second Level Cache(二级缓存):
● Second Level Cache 是指在 Mapper 范围内的缓存,它可以跨 SqlSession 共享数据。
● 如果开发者需要使用 Second Level Cache,需要在映射文件中进行配置。
● 当开启了 Second Level Cache 后,同一个 namespace 下的查询结果会被缓存起来,其他 SqlSession 也可以共享这部分数据,从而减少数据库查询次数。
● Second Level Cache 默认是关闭的,需要手动在映射文件中配置开启。