本文给你们介绍一下MyBatis的二级缓存,前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不一样的mapper都有一个二级缓存,也就是说,不一样的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图:
sql
从图中能够看出:缓存
缓存的执行原理和前面提到的一级缓存是差很少的,二级缓存与一级缓存区别在于二级缓存的范围更大,多个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,二级缓存是否是很简单,今天就分享到这,若是以为对你有一丢丢帮助,点个赞哦!
接口