MyBatis 缓存

MyBatis 缓存

MyBatis对缓存提供支持,但是在没有配置的情况下,它只开启一级缓存,一级缓存是指相对同一个SqlSession而言,所以在参数和SQL完全相同的情况下,我们使用同一个SqlSession对象 调用一个mapper方法,往往只执行一次SQL,因为使用SqlSession第一次查询后,Mybatis会将其放在缓存中,以后再次查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不是再次发送SQL到数据库。

一级缓存的声明周期?

1、MyBatis在开启一个数据库会话时,会创建一个新的SqlSession对象,SqlSession对象中会有一个新的Executor对象,Executor对象中持有一个新的PerpetualCache对象,当会话结束时,SqlSession对象以及内部的Executor对象还有PerpetualCache对象也会一起释放掉。

2、如果SqlSession调用了Close()方法,也会清空PerpetualCache对象中的数据,但是该对象仍可以用。

3、SqlSession中执行任何一个update操作(update、delete、insert)都会清空PerpetualCache对象的数据,但是该对象仍可以用。


二级缓存

MyBatis的二级缓存是Application级别的缓存,他可以提高对数据库的查询效率,以及提高应用的性能。

SqlSessionFactory 层面上的二级缓存,默认是不开启的,二级缓存必须需要配置,实现二级缓存的时候,MyBatis 要求返回的实体 必须是“序列化”的。(实体类 extends Serializable)

1、映射语句文件中的所有的select语句都会被缓存

2、映射语句文件中的所有 insert update delete语句都会刷新缓存

3、缓存会使用默认的Least Recently Used( LRU ,最近很少使用 ) 算法来收回。

4、根据时间表(CNFI 没有刷新间隔)缓存不会 以任何时间顺序来刷新

5、缓存会存储列表集合或对象(无论查询方法返回什么)的1024引用

6、缓存会被视为Read/Write(可读、可写)的缓存,所以这意味对象检索不是共享的,而且可以安全的被调用者修改,不干扰其他的调用者或线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值