1、简介
Mybatis本身提供一定的缓存功能,用于查询时进行缓存,减轻数据压力,提高数据库性能。Mybatis缓存分为一级缓存和二级缓存,默认开启一级缓存,二级缓存需要手动开启。下面是其缓存的示意图
一级缓存是sqlSession级别的,二级缓存是Mapper(namespace)级别的。下面对一级缓存和二级缓存进行相应的介绍。
2、一级缓存
一级缓存是SqlSesison级别的缓存。操作数据库时都需要构造一个sqlSession对象,在对象中就有一个数据结构(HashMap)来存储缓存数据。不同sqlSession之间的缓存数据区域是相互隔离的,互不影响。Mybatis默认开启一级缓存。
如下图所示:
第一次查询用户id为1的数据,会先在改sqlSession的缓存中取查是否有id=1的数据,如果没有,从数据库查询数据,并将数据存储在一级缓存中。
第二次查询id为1的数据时,如果是在同一个sqlSession中执行的话,会直接从缓存中拿数据,不需要查数据库。
如果中间sqlSession执行了commit操作(执行插入、更新、删除),就会清空sqlSession中的一级缓存。这样主要是为了让缓存中的数据是最新的,避免脏读。
2、二级缓存
二级缓存是mapper(namespace)级别的缓存。执行同一个mapper文件就会启动一个二级缓存(二级缓存开启的话)。