缓存

减少和数据库的交互次数,提高执行效率

适用于缓存

  • 经常查询且不常改变
  • 数据的正确与否对最终结果影响不大

不适用于缓存

  • 经常改变的
  • 数据的正确性对最终结果影响很大的

一级缓存

指的是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中,虽然他们的返回结果相同,它们返回的将不再是同一个对象。

Last modification:April 4, 2021
If you think my article is useful to you, please feel free to appreciate