什么是缓存
在讲解MyBatis的缓存机制之前,我们先来了解什么是缓存。
缓存就是将我们经常查询的数据的结果保存到一个内存中(缓存就是内存中的一个对象),那么在下一次查询的时候就不用到数据库文件中查询,而是从内存中获取,从而减少与数据库的交付次数提高了响应速度。
假如有一条数据的查询量非常大,且内容基本不变,反复查询就会让数据库压力变大,这时我们就可以将数据存在内存缓存中,这样就大大提高的了查询效率,同时缓解了数据库压力。
MyBatis的缓存机制MyBatis提供了一级缓存和二级缓存
一级缓存:也称为本地缓存,用于保存用户在一次会话过程中查询的结果,用户一次会话中只能使用一个sqlSession,一级缓存是默认开启的。在同一个 sqlSession 中两次执行相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取,从而提高查询效率。当一个 sqlSession 结束后该 sqlSession 中的 一级缓存也就不存在了。
二级缓存:也称为全局缓存,是mapper级别的缓存,是针对一个表的查结果的存储,可以共享给所有针对这张表的查询的用户。二级缓存是多个 SqlSession 共享的,其作用域是 mapper 的同一个 namespace,不同的 sqlSession 两次执行相同 namespace 下的 sql 语句且向 sql 中传递参数也相同,即最终执行相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据,而不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存,需要手动配置。