Hibernate框架学习——查询优化
Posted 会飞的咸鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate框架学习——查询优化相关的知识,希望对你有一定的参考价值。
一、类级别查询
1、get方法:没有任何策略,调用即立即查询数据库加载数据。
2、load方法:是在执行时不发送任何SQL语句,返回一个对象,使用该对象时才执行查询;应用类级别的加载策略。
1>延迟加载:仅仅获得,没有使用,不会查询,在使用时才进行查询
2>是否对类进行延迟加载:可以通过在class元素上配置lazy属性来控制
lazy(默认):true 查询类时会返回代理对象,会在使用属性时根据关联的session查询数据库,加载数据
加载时不查询,使用时才查询
lazy:false 加载时立即查询,和get方法没有区别
结论:为了提高效率,建议使用延迟加载(懒加载)
3>注意:使用懒加载时要确保,调用属性加载数据时,session还是打开的,不然会抛出异常。
二、关联级别查询
1、集合策略
lazy属性:决定是否延迟加载
true(默认):延迟加载,懒加载
false:立即加载
extra:极其懒惰,与懒加载效果基本一致
fetch属性:决定加载策略,使用什么类型的SQL语句加载集合数据
select(默认):单表查询加载
join:使用多表查询加载集合
subselect:使用子查询加载集合
2、关联属性策略
lazy属性:决定加载时机
false:立即加载
proxy:由Customer的类级别加载策略决定
fetch属性:决定加载的SQL语句
select:使用单表查询
join:使用多表查询
3、结论
为了提高效率,fetch应选择select,lazy应选择 true,全部使用默认值。
4、no-session问题解决
扩大session的作用范围
三、批量抓取
batch-size:抓取集合的数量
在抓取客户的集合时,一次抓取几个客户的联系人集合
以上是关于Hibernate框架学习——查询优化的主要内容,如果未能解决你的问题,请参考以下文章
JPA,Hibernate,ibatis(mybatis)如何选用?