MyBatis缓存

目录

 

一级缓存

二级缓存


  • 一级缓存

     一级缓存的使用不需要我们配置,一级缓存是基于PerpetualCacheHashMap本地缓存,其存储作用域为 Session,当 Session flushclose 之后,该Session中的所有 Cache就将清空。

 

  MyBatis 默认是开启一级缓存的,MyBatis会在一次会话中,一个SqlSession对象中创建一个本地缓存(local cache),对于每一次查询,都会尝试根据查询的条件去本地缓存中查找是否在缓存中,如果在缓存中,就直接从缓存中取出,然后返回给用户;否则,从数据库读取数据,将查询结果存入缓存并返回给用户。

  • 二级缓存

如果需要开启二级缓存,resultMap的对应的实体类必须要序列化不然会报java.io.NotSerializableException

一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。Serializable是一个空接口,它的目的只是简单的标识一个类的对象可以被序列化。

默认的二级缓存

Mybatis的二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCacheHashMap存储,不同在于其存储作用域为 Mapper(Namespace),也是一个内存级别的缓存

默认的二级缓存功能如下:
1.映射语句文件中所有的select语句将会被缓存
2.映射语句文件中所有的insert update delete语句会刷新缓存
3.缓存会使用(Least Flush Interval,LRU最近最少使用的)算法来收回
4.根据时间表(如 no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新
5.缓存会存储集合或对象(无论查询方法返回什么类型的值)的1024个引用
6.缓存会被视为read/wriete(可读/可写)的,意味着对象检索不是共享的,而且可以安全的被调用者修改,而不干扰其他调用者或者线程所做的潜在修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值