mybatis缓存机制
文章目录
- 缓存介绍
- 一级缓存
- 二级缓存
- 二级缓存使用步骤
- 二级缓存和一级缓存的区别:
缓存介绍
缓存主要是对查询起作用,减轻数据库的压力,提高数据库的性能
mybatis中提供了一级缓存、二级缓存
一级缓存是SQLSession级别的缓存,同一个SQLSession上的查询可以使用一级缓存,不同的SQLSession缓存是相互独立的,互不影响
二级缓存是mapper级别的缓存,多个SQLSession会命中二级缓存,及二级缓存可以在多个SQLSession之间共享
一级缓存
一级缓存是SQLSession级别缓存,一级缓存的作用域是一个SQLSession,在同一个sqlsession下两次执行相同的SQL查询操作,第一次执行完毕后会将数据库中查询的数据写入缓存,第二次会从缓存中获取数据则不从数据库中获取,提高查询效率,当SQLSession结束,缓存也就随之失效
mybatis是默认开启一级缓存
注意:缓存起作用是对同一个数据而言,必须是连续的查询操作,第一次操作之后缓存会起作用,在第一次查询之后对同一个数据做变更/删除操作,缓存会被清空,后续查询中的第一个查询是需要到数据库查询
一级缓存测试:
mybatis默认支持的,不需要配置
同一个session下连续查询操作:
二级缓存
mybatis的二级缓存是mapper级别的缓存,默认是关闭的
对同一个mapper其不同的SQLSession可以共享二级缓存,不同的mapper是相互独立的
二级缓存的使用需要打开二级缓存配置,映射的java对象实现序列化
二级缓存使用步骤
1、在mybatis的全局配置文件中打开二级缓存的开关
<settings><!--二级缓存的配置信息--><setting name="cacheEnabled " value="true"/></settings>2、将映射的对象实现序列化
public class Student implements Serializable3、在mapper中使用cache标签
<!--cache标签flushInterval(刷新时间) 是正整数,单位是毫秒,默认不设置,即没有刷新时间size(引用数据) 正整数,默认1024,记录是缓存的对象的数目readOnly(只读) eviction:给定缓存回收策略LRU:最近最少使用的,移除长时间不使用缓存对象FIFO:先进先出,按照对象进入缓存的顺序来移除对象soft:软引用:移除基于垃圾回收状态和软引用规则的对象weak:弱引用:移除弱引用所作用的对象--><cache flushInterval="60000" size="512" readOnly="true" eviction="LRU"/>二级缓存的测试:
useCache:配置禁用缓存
在Statement上设置useCache="false"禁用select查询的二级缓存,即每次查询都会去数据库,不使用二级缓存
二级缓存和一级缓存的区别:
二级缓存的范围更大,多个SQLSession可以共享一个mapper中的二级缓存,
每一个mapper都有一个二级缓存,如果mapper的namespace如果相同,这两个mapper执行查询SQL查询到的数据将存在相同的二级缓存区域中
一级缓存,二级缓存 SQLSession->defaultSqlSession ->CachingExecutor
一级缓存:LocalCache
二级缓存:tcm
执行优先级源码
总结
以上是生活随笔为你收集整理的mybatis缓存机制的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mybatis动态代理
- 下一篇: 485有时候从机接收指令没反应_原创案例