Mybatis缓存,执行原理

Mybatis缓存

缓存:

⼀级缓存

SqlSession 的缓存 ------>⾃动开启

⼆级缓存:

做到从不同的缓存中共享数据

SqlSessionFactory 的缓存 —>需要⼿动开启

映射配置⽂件中配置

<mapper namespace="接⼝路径">
         <cache eviction="FIFO"
             flushInterval="60000"
             size="512"
             readOnly="true"/>
</mapper>

说明:

eviction: ⼆级缓存中,缓存的对象从缓存中移除的策略,回收策略为先进先出

flushInterval: 刷新缓存的事件间隔,单位:毫秒

size: 缓存对象的个数

readOnly: 是否是只读的

测试代码:

//不同qlSession,要同⼀个sqlSessionFactory
SqlSessionFactory factory= new SqlSessionFactoryBuilder()
 .build(Resources.getResourceAsReader("mybatis-config.xml"));
 
SqlSession sqlSession1=factory.openSession();
Student student = sqlSession1.selectOne("com.yhp.dao.StudentDao.findbystuid",
1);
System.out.println(student.getSname());
sqlSession1.close();

System.out.println("===================================");
SqlSession sqlSession2= factory.openSession();
student = sqlSession2.selectOne("com.yhp.dao.StudentDao.findbystuid", 1);
System.out.println(student.getSname());
sqlSession2.close();

cache元素⽤来开启当前mapper的namespace下的⼆级缓存,该元素的属性设置如下:

flushInterval:刷新间隔,可以被设置为任意的正整数,⽽且它们代表⼀个合理的毫秒形式的时间段, 默认情况下是不设置的,也就是没有刷新间隔,缓存仅仅调⽤语句时刷新。

size:缓存数⽬,可以被设置为任意正整数,要记住你的缓存对象数⽬和你运⾏环境可⽤内存资源数
⽬,默认值是1024.

readOnly:只读,属性可以被设置为true或false,只读的缓存会给所有调⽤者返回缓存对象的相同实
例,因此这些对象不能被修改。这提供了很重要的性能优势,可读写的缓存会返回缓存对象的拷⻉(通
过序列化),这会慢⼀些,但是安全,因此默认是false。

eviction:收回策略,默认为LRU,有如下⼏种:

LRU:最近最少使⽤的策略,移除最⻓时间不被使⽤的对象。

FIFO:先进先出策略,按对象进⼊缓存的顺序来移除它们。

SOFT:软引⽤策略,移除基于垃圾回收器状态和软引⽤规则的对象。

WEAK:弱引⽤策略,更积极地移除基于垃圾收集器状态和弱引⽤规则的对象。

注意:使⽤⼆级缓存时,与查询结果映射的java对象必须实现java.io.Serializable接⼝的序列化和反序列
化操作,如果存在⽗类,其成员都需要实现序列化接⼝,实现序列化接⼝是为了对缓存数据进⾏序列化
和反序列化操作,因为⼆级缓存数据存储介质多种多样,不⼀定在内存,有可能是硬盘或者远程服务
器。

Mybatis缓存原理

在这里插入图片描述

1.当我们第一次去查询的时候,数据就放入了一级缓存

2.第二次查询就走缓存

3.当SQLSession关闭时,SQLSession中的一级缓存就会往二级缓存提交

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值