Hibernate查询优化简介
查询优化我们从两个方面来说:
1)类级别查询策略
2)关联级别查询策略
one by one
类级别查询策略
类级别查询策略就一点,就是使用延迟加载,什么是延迟加载呢?通俗的讲就是在你不使用时不加载,使用时根据关联的session加载数据。
延迟加载的实现原理:很简单就是使用动态代理。
所以只要我们调用方法查询到的对象时代理对象的时候,请注意,我们使用的时延迟加载策略。
我们来看一下延迟加载策略的体现:
这两张图看完就一目了然了吧!那么我们如何修改类级别的延迟加载策略呢?
<!-- lazy属性来修改类级别的延迟加载策略,true(默认)延迟加载,false立即加载 -->
<class name="Kind" lazy="true">
我想说的很清除了吧!
关联级别的查询策略
下面我们来瞅瞅关联级别的查询策略:
从两个方面来进行阐述:
1)<set>集合查询策略
2)<many-to-one>关联属性查询策略
one by one
<set>集合查询策略
<!-- 集合查询策略有两个限制属性:lazy,fetch -->
<set name="products" lazy="true" fetch="join">
<key column="kid"></key>
<one-to-many class="Product"/>
</set>
lazy的取值及作用:(加载策略)
1:true:开启延迟加载
2:false:关闭延迟加载
3:extra:开启及其懒惰加载
fetch的取值及作用:(抓取策略)
1:select:使用单表查询
2:join:使用多表查询
3:subselect:使用子查询
延迟加载我们就不一一演示了,我们就看一下抓取策略的效果吧!
1)使用单表查询
2)多表查询
(3)子查询
一时没有找到很好的案例,就不演示了。
<many-to-one>关联属性查询策略
<many-to-one name="kind" class="Kind" column="kid" lazy="false" fetch="join"></many-to-one>
lazy的取值及作用:
(1)false:延迟加载
(2)proxy:代理,即参考kind类的加载策略
fetch的取值及作用:
(1)join
(2)select
上面都演示过了在这就不一一演示了,为了提高hibernate的性能,我们均采用默认值即可。