【MyBatis】一级缓存和二级缓存

目录

 

什么是mybatis缓存?

一级缓存

二级缓存


什么是mybatis缓存?

  • 查询数据时将查询结果存放到内存(缓存区)中。
  • 每次查询数据时,先判断缓存区中是否存在数据,
    • 如果存在,就从缓存区中获取数据
    • 如果不存在,就从数据库中获取数据,将数据存放到缓存区中,给下次访问使用
  • 好处:
    • 避免频繁与数据库交互,提高数据访问效率。提升系统性能。

一级缓存

  • 一级缓存是SqlSession自带的。SqlSession对象被创建,一级缓存就存在了。
  • 默认开启
  • 如果SqlSession对象关闭或调用清理方法,会导致缓存失效。
  • 两次sql查询中间发生了增删改(insert、update、delete)等操作commit后,SqlSession的缓存会被清空
  • 缓存底层实现就是通过HashMap实现的。key为hashcode+statementId+sql语句,Value为查询出来的结果集映射成的java对象。
  • 一级缓存介质——内存

二级缓存

  • 二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享且向sql中传递的参数也相同,即最终执行相同的sql语句。
  • 默认不开启
  • 二级缓存SqlSessionFactory进行管理的。SqlSessionFactory对象是进程级别的。可以被多个SqlSession所共享。
  • 二级缓存介质——内存,硬盘
  • MyBatis框架自带了二级缓存,是通过HashMap实现的。

二级缓存使用,需要在主文件中进行配置:

①启用二级缓存

<!-- 启用二级缓存 -->

<setting name="cacheEnabled" value="true"/>

​

②在XxxMapper.xml文件中配置二级缓存策略、

<cache eviction="FIFO" flushInterval="60000"readOnly="true" size="512"/>

1.eviction:缓存策略 
    FIFO:First In First Out 
    LRU:Least Recently Used
2.flushInterval:缓存刷新时间间隔,时间是毫秒,检查是否存在过期对象
3.size:缓存中存储的对象个数
4.readOnly:是否只读

③对于MyBatis自带的二级缓存,实体类可以不用实现可序列化接口。

如果使用的是EhCahce缓存组件,有时会将数据缓存到硬盘上,需要可序列化支持的。必须实现java.io.Serializable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值