HQL進(jìn)階
HQL優(yōu)化
避免or操作
where
子句包含or
操作,執(zhí)行時(shí)不使用索引
from
House where
street_id
=
'1000' or
street_id
=
'1001'
可以使用in條件來替換
from
House where
street_id
in
('1001','1000')
避免使用not
where
子句包含not
關(guān)鍵字,執(zhí)行時(shí)該字段的索引失效
from
House as h where
not (h.price
>1800)
使用比較運(yùn)算符替換not
from
House as h where
h.price
<=
1800
避免like的特殊形式
查詢時(shí),盡可能少使用
避免having子句
子句中指定條件
避免使用distinct
Hibernate數(shù)據(jù)檢索策略
Hibernate提供多種數(shù)據(jù)檢索策略,常用的有:
立即檢索
延遲檢索
不同檢索策略的作用域及默認(rèn)檢索策略
作用域
類級(jí)別
關(guān)聯(lián)級(jí)別 立即檢索/延遲檢索
檢索策略的運(yùn)行機(jī)制
類型
立即檢索
類級(jí)別
立即加載檢索方法指定的對(duì)象
關(guān)聯(lián)級(jí)別
立即加載與檢索方法指定的對(duì)象關(guān)聯(lián)的對(duì)象,可以設(shè)定批量檢索數(shù)量
優(yōu)點(diǎn)
對(duì)應(yīng)用程序完全透明,不管對(duì)象處于持久化狀態(tài),還是游離狀態(tài),應(yīng)用程序都可以方便地從一個(gè)對(duì)象導(dǎo)航到與它關(guān)聯(lián)的對(duì)象缺點(diǎn)
(1)select語句數(shù)目多
(2)可能會(huì)加載應(yīng)用程序不需要訪問的對(duì)象,造成內(nèi)存空間的浪費(fèi)
---------------------------
類型
延遲檢索
類級(jí)別
延遲加載檢索方法指定的對(duì)象
關(guān)聯(lián)級(jí)別
延遲加載與檢索方法指定的對(duì)象關(guān)聯(lián)的對(duì)象,可以設(shè)定批量檢索數(shù)量
優(yōu)點(diǎn)
由應(yīng)用程序決定需要加載那些對(duì)象,可以避免執(zhí)行多余的select語句,以及避免加載應(yīng)用程序不需要訪問的對(duì)象。提高檢索性能,節(jié)省內(nèi)存空間
缺點(diǎn)
應(yīng)用程序如果希望訪問游離狀態(tài)的代理類實(shí)例,必須保證它在持久化狀態(tài)時(shí)已經(jīng)被初始化
設(shè)定檢索策略的常用屬性
屬性
lazy
類級(jí)別
1.<class>元素中lazy屬性的可選值為:true(延遲檢索)和false(立即檢索)
2.
<class>元素中lazy屬性的默認(rèn)值為true
一對(duì)多關(guān)聯(lián)級(jí)別
1.<set>元素中lazy屬性的可選值為:true(延遲檢索)、false(立即檢索)和extra(增強(qiáng)延遲檢索)
2.
<set>元素中lazy屬性的默認(rèn)值為true
多對(duì)一關(guān)聯(lián)級(jí)別
1.<many-to-one>元素中的lazy屬性的可選值為:proxy(延遲檢索)、no-proxy(無代理延遲檢索)和false(立即檢索)
2.<many-to-one>元素中的lazy屬性的默認(rèn)值為true
--------------------------------------------
屬性
fetch
類級(jí)別
沒有此屬性
一對(duì)多關(guān)聯(lián)級(jí)別
1.<set>元素中fetch屬性的可選值為:select(查詢語句)、subselect(子查詢語句)和join(迫切左外連接檢索)
2.
<set>元素的fetch屬性的默認(rèn)值為select
多對(duì)一關(guān)聯(lián)級(jí)別
1.<many-to-one>元素中fetch屬性的可選值為:select(查詢語句)和join(迫切左外連接檢索)
2.<many-to-one>元素的fetch屬性的默認(rèn)值為select
HQL 聯(lián)接查詢
內(nèi)聯(lián)接:inner
join
最典型、最常用的聯(lián)接查詢
兩個(gè)表存在主外鍵關(guān)系時(shí)通常會(huì)使用內(nèi)聯(lián)接查詢
join 或
left
outer join
join 或right
outer join
join或
full
outer join
HQL語法
inner
join 或
join
join fetch或
join
fetch
outer join或
left
join
outer join fetch或
left
join
fetch
right
outer join 或
right
join
from
Entity inner
join [fetch]
Entity.property
from
Entity left
join [fetch]
Entity.property
from
Entity right
join [fetch]
Entity.property
posted on 2012-04-22 15:52 hantai 閱讀(127) 評(píng)論(0) 編輯 收藏