12 Hibernate数据抓取(加载)策略

上传人:豆浆 文档编号:24901614 上传时间:2017-12-08 格式:PDF 页数:25 大小:227.08KB
返回 下载 相关 举报
12 Hibernate数据抓取(加载)策略_第1页
第1页 / 共25页
12 Hibernate数据抓取(加载)策略_第2页
第2页 / 共25页
12 Hibernate数据抓取(加载)策略_第3页
第3页 / 共25页
12 Hibernate数据抓取(加载)策略_第4页
第4页 / 共25页
12 Hibernate数据抓取(加载)策略_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《12 Hibernate数据抓取(加载)策略》由会员分享,可在线阅读,更多相关《12 Hibernate数据抓取(加载)策略(25页珍藏版)》请在金锄头文库上搜索。

1、Hibernate关联数据加载策略命名约定 关联数据的种类(以一对多为例) 教师对学生的关系是一对多,查询时可查询教师信息,也可以查询学生信息 查询教师信息时,会携带学生信息的集合获取的教师信息称为主数据获取的学生信息集合称为主关联数据 查询学生信息时,会携带教师信息获取的学生信息称为从数据获取的教师信息称为从关联数据 本章知识研究的是主关联数据与从关联数据的加载主关联数据加载策略 教师对学生的关系为一对多,此时在教师模型中配置学生的集合。对教师模型对应的配置文件中的set进行相关的配置,来控制对应的学生集合的数据加载策略fetch:用于控制进行关联查询时,产生的SQL语句lazy:用于控制进

2、行关联查询时,被关联数据的加载策略fetch取值范围:select / subselect / join lazy取值范围:true / false / extra主关联数据加载策略fetch=select lazy=false获取主数据执行主数据的查询SQL(一条SQL语句)执行主关联数据所有信息查询SQL (多条SQL语句)获取主关联数据集合中数据数量(A)不执行SQL语句获取主关联数据集合中数据的具体数据(B)不执行SQL语句主关联数据加载策略fetch=select lazy=true获取主数据执行主数据的查询SQL获取主关联数据集合中数据数量(A)执行主关联数据对应的具体信息查询SQ

3、L(按需产生SQL语句A)获取主关联数据集合中数据的具体数据(B)执行主关联数据对应的具体信息查询SQL (按需产生SQL语句A) 注意:操作A和操作B对应的查询SQL语句相同,查询执行后,数据存入一级缓存,下次查询时,不再执行SQL语句主关联数据加载策略fetch=select lazy=extra获取主数据执行主数据的查询SQL获取主关联数据集合中数据数量(A)执行主关联数据集合数据总量查询SQL(按需产生SQL语句A)获取主关联数据集合中数据的具体数据(B)执行主关联数据对应的具体信息查询SQL (按需产生SQL语句B) 注意:先执行A操作,再执行B操作,AB操作均产生SQL语句先执行B

4、操作,再执行A操作,BA操作只产生B操作SQL语句主关联数据加载策略fetch=subselect lazy=false获取主数据执行主数据的查询SQL(一条SQL语句)执行主关联数据全部具体信息查询SQL (一条子查询SQL语句)获取主关联数据集合中数据数量(A)不执行SQL语句获取主关联数据集合中数据的具体数据(B)不执行SQL语句 注意(以下fetch=subselect情况均符合下列描述):使用Query查询,并且未携带OID作为查询条件,查询SQL语句采用子查询的形式使用Query查询,携带OID作为查询条件或使用load/get查询,查询SQL生成等同于fetch=select (

5、subselect=select)主关联数据加载策略fetch=subselect lazy=true获取主数据执行主数据的查询SQL(一条SQL语句)获取主关联数据集合中数据数量(A)执行主关联数据对应的具体信息查询SQL(一条子查询SQL语句A)获取主关联数据集合中数据的具体数据(B)执行主关联数据对应的具体信息查询SQL(一条子查询SQL语句A) 注意:操作A和操作B对应的查询语句相同,查询执行后,数据存入一级缓存,下次查询时,不再执行SQL语句使用Query查询,携带OID作为查询条件或使用load/get查询,查询SQL生成等同于fetch=select (subselect=sel

6、ect)主关联数据加载策略fetch=subselect lazy=extra获取主数据执行主数据的查询SQL获取主关联数据集合中数据数量(A)执行主关联数据集合数据总量查询SQL(按需产生SQL语句A)获取主关联数据集合中数据的具体数据(B)执行主关联数据对应的具体信息查询SQL (一条子查询SQL语句B) 注意:先执行A操作,再执行B操作,AB操作均产生SQL语句先执行B操作,再执行A操作,BA操作只产生B操作SQL语句使用Query查询,携带OID作为查询条件或使用load/get查询,查询SQL生成等同于fetch=select (subselect=select)主关联数据加载策略f

7、etch=join 使用Query查询数据(不区分是否携带OID作为参数) lazy=false获取主数据执行主数据的查询SQL(一条SQL)执行主关联数据的查询SQL (多条SQL)获取主关联数据集合中数据数量(A)不执行SQL语句获取主关联数据集合中数据的具体数据(B)不执行SQL语句主关联数据加载策略fetch=join 使用Query查询数据(不区分是否携带OID作为参数) lazy=true获取主数据执行主数据的查询SQL(一条SQL)获取主关联数据集合中数据数量(A)执行主关联数据对应的具体信息查询SQL (按需产生SQL语句A)获取主关联数据集合中数据的具体数据(B)执行主关联数

8、据对应的具体信息查询SQL (按需产生SQL语句A) 注意:操作A和操作B对应的查询SQL语句相同,查询执行后,数据存入一级缓存,下次查询时,不再执行SQL语句主关联数据加载策略fetch=join 使用Query查询数据(不区分是否携带OID作为参数) lazy=extra获取主数据执行主数据的查询SQL(一条SQL)获取主关联数据集合中数据数量(A)执行主关联数据集合数据总量查询SQL (按需产生SQL语句A)获取主关联数据集合中数据的具体数据(B)执行主关联数据对应的具体信息查询SQL (按需产生SQL语句B) 注意:先执行A操作,再执行B操作,AB操作均产生SQL语句先执行B操作,再执

9、行A操作,BA操作只产生B操作SQL语句主关联数据加载策略fetch=join 使用load/get查询数据,此时lazy属性失效获取主数据SQL格式:左外连接查询主数据与主关联数据一次性全部查询出来(仅一条SQL)获取主关联数据集合中数据数量(A)不执行SQL语句获取主关联数据集合中数据的具体数据(B)不执行SQL语句主关联数据加载策略总结 fetch属性控制生成的SQL语句的策略select:独立查询语句subselect:子查询语句如果使用Query查询,并且没有提供OID时,才使用子查询join:左外连接查询如果使用load/get查询才使用左外连接查询 lazyfalse:不开启延迟

10、加载策略true:开启延迟加载策略extre:开始加强延迟加载策略,当调用主关联数据集合对应的size()、isEmpty()等操作时,不加载具体数据从关联数据加载策略 教师对学生的关系为一对多,此时在学生模型中配置教师的对象。对学生模型对应的配置文件中的many-to-one进行相关的配置,来控制对应的教师对象的数据加载策略fetch:用于控制进行关联查询时,产生的SQL语句lazy:用于控制进行关联查询时,被关联数据的加载策略fetch取值范围:select / join lazy取值范围:false / proxy / no-proxy(Hibernate拦截器)从关联数据加载策略fet

11、ch=select lazy=false获取从数据执行从数据的查询SQL(一条SQL语句)执行从关联数据所有信息查询SQL (多条SQL语句)获取从关联数据集合中数据的具体数据不执行SQL语句从关联数据加载策略fetch=select lazy=proxy获取从数据执行从数据的查询SQL(一条SQL语句)从关联数据lazy=false,执行从关联数据所有信息查询SQL(多条SQL)获取从关联数据从关联数据lazy=true,执行从关联数据所有信息查询SQL (按需产生SQL语句) 加载代理指自己不控制加载策略,改由被加载的数据自身控制加载策略。使用lazy=proxy配置,还需要参照从关联数据

12、模型自身的lazy设置值从关联数据加载策略fetch=join 使用Query查询数据 lazy=false获取从数据执行从数据的查询SQL(一条SQL语句)执行从关联数据所有信息查询SQL (多条SQL语句)获取从关联数据不执行SQL语句从关联数据加载策略fetch=join 使用Query查询数据 lazy=proxy获取从数据执行从数据的查询SQL(一条SQL语句)从关联数据lazy=false,执行从关联数据所有信息查询SQL(多条SQL)获取从关联数据从关联数据lazy=true,执行从关联数据所有信息查询SQL (按需产生SQL语句)从关联数据加载策略fetch=join 使用lo

13、ad/get查询数据,此时lazy属性失效获取主数据SQL格式:左外连接查询从数据与从关联数据一次性全部查询出来(仅一条SQL)获取从关联数据不执行SQL语句加载策略的选择 延迟加载可以有效的节约内存空间 在使用时,尽可能的使用延迟加载策略,只有不能使用延迟加载时,才使用立即加载策略关联数据加载策略的作用 业务:显示每位收银员信息和今日结单总数 业务:显示全部员工信息和对应主管姓名 业务:显示年终为各部门准备礼品的数量 业务:显示学员参加了哪些课程的考试 业务:计算学员需要缴纳的补考费 业务:投票,每个IP只能投票10次 业务:显示张三曾在几个部门任职 业务:显示张三曾在哪些部门任职主/从数据

14、加载优化 主/从数据加载,基于关联关系,对关联数据进行预加载,加载时基于配置不同,会产生执行多条SQL语句加载同一系列的数据。例如获取主数据时,设定fetch=“select”,lazy=“false”此时获取主数时,会立即查询对应的联合数据集合,此时使用多条SQL语句完成此操作 完成上述同一任务执行多条相同的SQL语句,需要开销的查询时间过高,此时可以通过设定每次查询获取的数据量提高效率 关联关系中添加批量抓取策略batch-size=“3”批量抓取策略 批量抓取可以对所有关联关系进行设定主数据关联数据配置设置batch-size batch-size的取值范围batch-size默认设置值为1,即一次抓取1条数据如果batch-size设置值过大,每次获取的数据量越多,内存消耗越高,速度越快如果batch-size设置值过小,每次获取的数据量越少,内存消耗越低,速度越慢多表关联查询与关联对象获取间的关系 多表关联查询是指定SQL语句进行查询A 关联对象获取控制的是关联对象加载的策略B 当两种形式混用时A控制主数据的获取方式B控制关联数据的获取方式和加载方式如果A,B发生冲突,以B为准B本身就设置有获取方式,只不过采用的是默认值,手工指定加载策略后,将按照指定的策略进行加载,因此不存在冲突问题,此处是开发者固定思维所限制的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号