一、延迟加载

  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使用二级缓存。

刷新二级缓存

最新文章

  1. 用typedef定义函数指针的问题
  2. 解决Window Azure: Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found.
  3. gruntJs篇之connect+watch自动刷新
  4. Hibernate的批量处理
  5. uva 10020 Minimal coverage
  6. 常见B2C网站购物车的设计
  7. oracle 函数的创建和调用
  8. c# 数组简述
  9. phpmailer 发送邮件(一)
  10. The 3rd tip of DB QueryAnalyzer
  11. js 单行注释
  12. [LeetCode] Largest Triangle Area 最大的三角区域
  13. js对象的创建
  14. EntityFramework Code-First 简易教程(四)-------继承策略
  15. Centos下安装破解Jira7的操作记录
  16. MySQL学习----explain查看一条sql 的性能
  17. JMeter学习(六)检查点(转载)
  18. SQLSERVER 对于非dbo的表增加注释
  19. c4 L3-001 找零钱 (简单01背包-输出最小字典序解(用vector保存当前最优解))
  20. Python之函数——进阶篇

热门文章

  1. @codechef - SONATR@ Sonya and Tree
  2. iptables发布内部网络服务器
  3. JSX语法及特点介绍
  4. Android 自定义ProgressDialog
  5. mosquitto/openssl 在RK3288上的编译以及MQTT客户端的代码示例
  6. Mac MAMP 使用终端shell操作mysql数据库
  7. P1113 同颜色询问
  8. Spring的注解@Qualifier注解
  9. Python--day46--mysql触发器
  10. linux scull 函数open 方法