缓存概念:
执行两次相同的查询语句,第一次会在数据库中查询,并保存查询的结果对象(实体类对象),第二次查询的时候就
不用再去数据库查询了,直接从缓存中拿上一次查询的结果
一级缓存:
默认开启的,每个SqlSession有单独的缓存,不同的会话之间缓存不共享。执行insert、delete、update或调
用方法sqlSession.clearCache()后,缓存就会被清空
二级缓存:
1.需要手动开启,不同的SqlSession之间共享缓存。执行insert、delete、update会清空缓存。
二级缓存是按命名空间区分的,也就是mapper.xml中mapper标签的namespace属性,不同的命名空间有不同
的缓存,也就是不同的DAO接口查询的结果放在不同的缓存中。
2.使用:在mybatis-config.xml中添加<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
在mapper.xml文件中添加<cache />,则会对该文件中的select结果使用二级缓存
3.参数:
1).eviction:
LRU – 最近最少使用:移除最长时间不被使用的对象。默认值
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
2).flushInterval: 缓存刷新间隔,不设置的话就在调用insert、update、insert时刷新
3).size: 引用数目, 默认值1024
4).readOnly: 如果为true,则每次都返回缓存对象的同一实例,为false则返回缓存对象的拷贝,默认
false
4.存储在二级缓存中的对象(实体类)要实现Serializable接口
5.select可以设置useCache="false"来对该select结果禁用二级缓存
6.select、insert、update、delete都可设置flushCache属性决定执行该语句是否刷新缓存
7.cache-ref: 如果不同命名空间之间想要共享缓存,则 <cache-ref namespace="要与之共享缓存的目标命
名空间" />
8.第三方缓存:如果使用第三方缓存 <cache type="缓存实现类"/>
|