Hibernate查询优化

来源:互联网 发布:手机淘宝淘金币在哪里 编辑:程序博客网 时间:2024/06/08 09:03

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的性能,我们均采用默认值即可。