MyBatis笔记(五)——查询缓存

MyBatis的缓存分为一级缓存与二阶缓存,缓存的存在能够大大减少数据库使用的压力

其中一级缓存是基于SqlSession的缓存,二阶缓存是基于mapper的缓存。


一级缓存


    一级缓存基于sqlSession,mybatis创建sqlsession对象的时候,该对象内部存在Hashmap数据结构,保存着缓存的数据。不同的sqlsession是互不影响的。

    二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    下图是其工作原理:

     

  二级缓存

 下图为二级缓存工作原理

  

    可以看到,二级缓存是跨sqlsession的,当sqlsession1首先执行UserMapper的查询操作后,如果sqlsession2也执行同样的查询操作,那么在usermapper的缓存中会给sqlsession2缓存数据,而不是重新查询,但是当sqlsession3对缓存区域数据做了改动或者提交了Usermapper,那么就会清空usermapper的缓存,另外两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。

      二级缓存的开启需要在除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。

猜你喜欢

转载自blog.csdn.net/lpckr94/article/details/80282716