MyBatis原理-延迟加载,一级缓存,二级缓存设置
2024-09-03 19:13:50
一、延迟加载
resultMap中的association和collection标签具有延迟加载的功能。
延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。
<!-- 开启延迟加载 -->
<settings>
<!-- lazyLoadingEnabled:延迟加载启动,全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。默认是false -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- aggressiveLazyLoading:积极的懒加载,当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。false的话按需加载,默认是true -->
<setting name="aggressiveLazyLoading" value="false"/> <!-- 开启二级缓存,默认是false -->
<setting name="cacheEnabled" value="true"/>
</settings>
二、查询缓存
Mybatis的一级缓存是指SqlSession。一级缓存的作用域是一个SqlSession。Mybatis默认开启一级缓存。
在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中,Mybatis的内部缓存使用一个HashMap,key为hashcode+statementId+sql语句,Value为查询出来的结果集映射成的java对象。;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。
Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则二级缓存清空。
springboot开启二级缓存
(1)在配置文件中添加:
mybatis.configuration.cache-enabled=true
(2)在mapper文件添加
<mapper namespace="com.yanwu.www.UserMapper">
<!-- 开启二级缓存 -->
<cache/>
注意:因为缓存的数据不一定都是存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化。
禁用二级缓存
该statement中设置userCache=false可以禁用当前select语句的二级缓存,即每次查询都是去数据库中查询,默认情况下是true,即该statement使用二级缓存。
刷新二级缓存
最新文章
- 用typedef定义函数指针的问题
- 解决Window Azure: Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found.
- gruntJs篇之connect+watch自动刷新
- Hibernate的批量处理
- uva 10020 Minimal coverage
- 常见B2C网站购物车的设计
- oracle 函数的创建和调用
- c# 数组简述
- phpmailer 发送邮件(一)
- The 3rd tip of DB QueryAnalyzer
- js 单行注释
- [LeetCode] Largest Triangle Area 最大的三角区域
- js对象的创建
- EntityFramework Code-First 简易教程(四)-------继承策略
- Centos下安装破解Jira7的操作记录
- MySQL学习----explain查看一条sql 的性能
- JMeter学习(六)检查点(转载)
- SQLSERVER 对于非dbo的表增加注释
- c4 L3-001 找零钱 (简单01背包-输出最小字典序解(用vector保存当前最优解))
- Python之函数——进阶篇