缓存:暂时的存储一些数据,为了加快系统的查询速度…
CPU中一级缓存(4MB),二级缓存(16MB)
数据库交互:
MyBatis缓存机制:Map,能保存查询出的一些数据
一级缓存:线程级别的缓存(本地缓存,sqlSession级别的缓存)
二级缓存:全局范围的缓存,除过当前线程,SqlSession能用外,其他也能用
一级缓存:默认存在的
只要之前查询过的数据,mybatis就会保存在一个缓存中(Map),下次获取直接从缓存中拿
一级缓存失效的几种情况:
1)不同的sqlsession使用不同的一级缓存
只有在同一个sqlSession期间查询到的数据会保存在本sqlSession缓存中
2)同一个方法,参数不同还会发新的sql
3)在这个sqlSession期间执行上任何一次增删改操作,增删改操作会把缓存清空
4)手动清缓存:openSession.clearCache();
二级缓存
二级缓存MyBatis默认是没有开启的
全局配置开启
<!-- 开启全局缓存开关 -->
<setting name="cacheEnabled" value="true"/>
配置某个dao.xml
<!-- 使用二级缓存 -->
<cache></cache>
可能的异常:javaBean要实现序列化
public class Teacher implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
整合第三方缓存
MyBatis开放了自己的Cache接口
整合ehcache,ehcache是一个非常专业的java进程内的缓存框架
1、导包
2、ehcache要工作要有配置文件
文件名叫ehcache.xml放在类路径根目录下
3、在mapper.xml中配置
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>