mybatis中的缓存

一、缓存的基本概念

1、什么是缓存?

存在于内存中的临时shuju

2、为什么使用缓存?

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

3、什么样的数据能使用缓存,什么样的数据不能使用缓存?

  • 适用于缓存:经常查询并且不经常改变,而且数据的正确与否对最终结果影响不大的
  • 不适用于缓存的:经常改变的数据,数据的正确与否对最终结果影响很大的,例如:商品的库存、银行的汇率

二、mybatis中的一级缓存和二级缓存

1、一级缓存

它指的是Mybatis中SqlSession对象的缓存。当我们执行查询之后,查询的结果同时会存入到SqlSession为我们提供的一块区域当中。该区域的结构是一个Map结构。当我们再次查询同样的数据时,mybatis会先去sqlsession对象中查询是否有我们需要的数据,如果有的话则直接取出使用。当然,在sqlsession对象消失时,mybatis的以及缓存也就同时消失了,sqlsession对象调用clearCache()这个方法同样可以清空缓存

如果数据库中的数据和一级缓存中的数据不一致了,那mybatis如何做到同步的呢?

mybatis当调用了sqlsession的修改、添加、删除、commit()、close()等方法时就会清空一级缓存。所以当我们数据库的数据发生更改的时候,它会清空缓存中的数据然后重新发起查询

2、二级缓存

它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessioinFactory对象创建的SqlSession共享缓存。
在这里插入图片描述

二级缓存的使用步骤

  1. 让Mybatis框架支持二级缓存(再SqlMapConfig.xml中配置)
  2. 让当前映射文件支持二级缓存(再IUserDao.xml中配置)
  3. 让当前操作支持二级缓存(再select标签中配置)

在这里插入图片描述

先再主配置文件中添加settings内容
在这里插入图片描述
然后配置对应接口的xml文件
在这里插入图片描述
添加<cache/>标签表示使映射文件支持二级缓存,然后让select标签支持二级缓存只需要添加useCache="true"这个标签属性

并且注意我们的二级缓存中存放的是数据,不是对象
注意:
在这里插入图片描述
在二级缓存当中存放的是这种散装的数据{"id":41,"username":"老王","adress":"北京"},当谁需要这个数据的时候,他就把这个数据填充到一个对应的封装类对象中然后把这个对象传递出去

posted @ 2021-01-08 11:31  谢海川  阅读(51)  评论(0)    收藏  举报