MyBatis学习:MyBatis中的二级缓存

本文给你们介绍一下MyBatis的二级缓存,前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不一样的mapper都有一个二级缓存,也就是说,不一样的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图:
sql


从图中能够看出:缓存

  • sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中;
  • 若是SqlSession3去执行相同 mapper下sql,执行commit提交,则会清空该UserMapper下二级缓存区域的数据;
  • sqlSession2去查询用户id为1的用户信息,去缓存中找是否存在数据,若是存在直接从缓存中取出数据。

缓存的执行原理和前面提到的一级缓存是差很少的,二级缓存与一级缓存区别在于二级缓存的范围更大多个sqlSession能够共享一个mapper中的二级缓存区域mybatis是如何区分不一样mapper的二级缓存区域呢?它是按照不一样mapper有不一样的namespace来区分的,也就是说,若是两个mapper的namespace相同,即便是两个mapper,那么这两个mapper中执行sql查询到的数据也将存在相同的二级缓存区域中mybatis

如何开启二级缓存?

因为mybaits的二级缓存是mapper范围级别,因此除了在SqlMapConfig.xml设置二级缓存的总开关外,还要在具体的mapper.xml中开启二级缓存。设置以下:
app


这是在SqlMapConfig.xml中设置的,还得在具体的mapper.xml中设置,以下:
spa


能够看到,具体的mapper中仅仅就一个<cache>标签,并无配置啥东西,这是由于mybatis中有默认的实现,咱们若是不配置,那么就默认使用那个默认的实现。在mybatis的核心包里有cache的接口和这个默认的实现,我截个图。
cdn


因此就明白了,为啥不用配置均可以使用,mybatis中也就只有这一个默认实现类,若是不使用mybatis的默认二级缓存的话,就须要本身实现cache接口,而后再在mapper.xml中配置一下了,关于这个我在下面再谈,如今先把二级缓存用起来!xml

开启了二级缓存后,还须要将要缓存的pojo实现Serializable接口,为了将缓存数据取出执行反序列化操做,由于二级缓存数据存储介质多种多样,不必定只存在内存中,有可能存在硬盘中,若是咱们要再取这个缓存的话,就须要反序列化了。因此建议mybatis中的pojo都去实现Serializable接口。下面以User为例截个图:blog


OK,二级缓存是否是很简单,今天就分享到这,若是以为对你有一丢丢帮助,点个赞哦!
接口

相关文章
相关标签/搜索