缓存分为两级:
一级缓存是基于sqlsession的缓存,在操作数据库的时候创建sqlsession对象,然后sqlsession对象里有一个私有的专门用于储存数据的HashMap,别的sqlsession无法访问此HashMap。
第一次select执行完毕后会将查到的数据储存在此HashMap里面;
第二次执行select时会从此缓存中查找数据,如果传参一样,那么就会直接从此储存中返回数据而不用去数据库返回,提高了查找的效率。
二级缓存是mapper级别的缓存,也就是同一个mapper.xml的namespace,多个sqlsession使用同一个mapper操作数据库时,得到的数据会储存在同一个二级缓存区域。
一级缓存是默认开启的,二级缓存是默认没有开启的,需要在全局配置文件中手动开启。
开启二级缓存步骤:
1. 在mybatis-config.xml配置文件里开启
<settings>
<setting name="cacheEnabled" value="true"/><!-- 默认是false:关闭二级缓存 -->
<settings>
2.在mapper.xml文件里配置
<!-- 当前mapper下所有语句开启二级缓存 -->
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
属性含义:LRU算法缓存,每隔60秒刷新,最大存储512个对象,返回的对象是只读的。