缓存
减少和数据库的交互次数,提高执行效率
适用于缓存
- 经常查询且不常改变
- 数据的正确与否对最终结果影响不大
不适用于缓存
- 经常改变的
- 数据的正确性对最终结果影响很大的
一级缓存
指的是Mybatis中SqlSession
对象的缓存(MyBatis自带属性)。
当我们执行查询后,查询结果会同时存入到SqlSession
为我们提供的一块Map结构中。当再次查询同样的数据时,Mybatis会先去SqlSession
的这块缓存空间中去查询。有的话直接取出。
当SqlSession
对象消失时,一级缓存也消失。
当执行了任何修改有关的操作时,缓存将被清空。
二级缓存
指的是Mybatis中所有SqlSession
对象共享的缓存。属于SqlSessionFactory
。
- 在Mybatis的全局配置文件中配置
cacheEnabled
属性。
<settings>
...
<setting name="cacheEnabled" value="true"/>
...
</settings>
- 在dao层的映射文件中配置,如下
<cache/> <!--第一步-->
<select id="findAll" resultType="com.oylong.domain.User" useCache="true"> <!--第二步-->
select * from user
</select>
需要注意的是,在不同的SqlSession中,虽然他们的返回结果相同,它们返回的将不再是同一个对象。