11.延迟加载

延迟加载

  MyBatis 中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推 迟对关联对象的 select 查询。延迟加载可以有效的减少数据库压力。 

需要注意的是,MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。

  

  关联对象加载时机

MyBatis 根据对关联对象查询的 select 语句的执行时机,分为三种类型:直接加载、侵 入式延迟加载与深度延迟加载。

    1.直接加载:执行完对主加载对象的select语句,马上执行对关联对象的select查询

    2.侵入式延迟加载:执行完主加载对象的查询时,不会马上执行对关联对象。但当要访问主加载对象的详情时,

    就会马上执行关联对象的select查询。即对关联对象的查询执行,侵入到了主加载对象的详情中

    即将关联对象的详情作为主加载对象详情的一部分出现了

    3.深度延迟加载:执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象 的详情时也不会执行关联对象的 select 查询。

    只有当真正访问关联对象的详情时,才会 执行对关联对象的 select 查询

 

需要注意的是,延迟加载的应用要求,关联对象的查询与主加载对象的查询必须是分别 进行的 select 语句,

不能是使用多表连接所进行的 select 查询。因为,多表连接查询,其实 质是对一张表的查询,

对由多个表连接后形成的一张表的查询。会一次性将多张表的所有信 息查询出来。

MyBatis 中对于延迟加载设置,可以应用到一对一、一对多、多对一、多对多的所有关 联关系查询中

 

 1 <!-- 三种加载方式:1.直接加载  2.侵入延迟加载   3.深度延迟加载  其中深度延迟加载最 lazy, 其次 是侵入延迟加载-->
 2     <settings>
 3         <!-- 延迟加载总开关-->
 4         <!-- 默认为false,不采用延迟加载,即采用直接加载 -->
 5         <!-- 直接加载:执行完主加载对象的 select 语句,马上执行关联对象的 select 语句 -->
 6         <!-- 因为侵入延迟加载 默认不开启,所以当开启延迟加载后,采用的 深度延迟加载(即用到了才去加载,发出SQL,在 hibernate 中是load方法 和 fetchType ,都是类似这种深度延迟加载 ) -->
 7         <setting name="lazyLoadingEnabled" value="true" />
 8
 9         <!-- 侵入延迟加载的开关 默认为false,开启后,即采用侵入延迟加载 -->
10         <!-- 侵入延迟加载:该延迟策略使关联对象的数据侵入到了主加载对象的数据中,当主加载对象的数据被调用时,关联对象 随之被调用 ,即当对象中属性被使用后,就要发出SQL语句去加载关联对象-->
11
12         <setting name="aggressiveLazyLoading" value="true"/>
13     </settings>

  延迟加载策略总结

时间: 2024-11-08 18:17:00

11.延迟加载的相关文章

Android高级部分常见问题

四个月的培训马上就要结束了,感谢新博离校长和各位老师,同学们的帮助,希望新博越办越好,同学们能够找到属于自己的平台,务实奋进,开拓一块属于自己的领域! 下面简单整理下高级部分做项目期间遇到的常见问题以及解决方法: 总结经验 1. 哪些比较好的经验 1) 封装 2) 分析.设计.实现 3) 文件结构:物理架构 4) 时机 5) 命名 6) 常量类 7) 复用 8) 单独例子 9) 错误日志   关键词 10) 积累工具类 11) 延迟加载.多线程机制 12) 控制台信息 项目出现叹号 原因:项目配

iphone开发-基础笔记总结(1)

1.ios完整学习路线 2.ios开发的一般步骤: 搭建界面                                         UI界面(User Interface) 发送网络请求                                   多线程/网络 网络数据解析                                   json/xml解析 在界面上进行数据展示                   数据的封装展示 3.为了方便开发者开发出强大的功能,苹果提

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

【MyBatis学习11】MyBatis中的延迟加载

1. 什么是延迟加载 举个例子:如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 所以延迟加载即先从单表查询.需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 我们来对比一下: 关联查询:SELECT orders.*, user.username FROM orders, USER WHERE orders.user_id = user.id 延迟加载相当于:

懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么要判断是否为空? 4.>为什么下方代码"//1"这里不用NSString stringWithFormat: 而"//2"这里要使用? 5.>同时"//2"这里为什么使用的是%ld 来作为占位符? 这些问题不搞懂,懒加载就很难通透,  代

MyBatis学习--延迟加载

简介 在resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能.例如:我们查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询.需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快. association实现延迟加载 如果我们查询订单