日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
Hibernate查詢方法與緩存的關系

在開發(fā)中,通常是通過兩種方式來執(zhí)行對數(shù)據(jù)庫的查詢操作的。一種方式是通過ID來獲得單獨的Java對象,另一種方式是通過HQL語句來執(zhí)行對數(shù)據(jù)庫的查詢操作。下面就分別結合這兩種Hibernate查詢方法來說明一下緩存的作用。

成都創(chuàng)新互聯(lián)長期為上千多家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為西市企業(yè)提供專業(yè)的網站設計制作、網站建設,西市網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

通過ID來獲得Java對象可以直接使用Session對象的load()或者get()方法,這兩種方式的區(qū)別就在于對緩存的使用上。 下面我們來具體看看Hibernate查詢方法的實現(xiàn)。

load()方法

在使用了二級緩存的情況下,使用load()方法會在二級緩存中查找指定的對象是否存在。

在執(zhí)行l(wèi)oad()方法時,Hibernate首先從當前Session的一級緩存中獲取ID對應的值,在獲取不到的情況下,將根據(jù)該對象是否配置了二級緩存來做相應的處理。

如配置了二級緩存,則從二級緩存中獲取ID對應的值,如仍然獲取不到則還需要根據(jù)是否配置了延遲加載來決定如何執(zhí)行,如未配置延遲加載則從數(shù)據(jù)庫中直接獲 取。在從數(shù)據(jù)庫獲取到數(shù)據(jù)的情況下,Hibernate會相應地填充一級緩存和二級緩存,如配置了延遲加載則直接返回一個代理類,只有在觸發(fā)代理類的調用 時才進行數(shù)據(jù)庫的查詢操作。

在Session一直打開的情況下,并在該對象具有單向關聯(lián)維護的時候,需要使用類似Session.clear(),Session.evict()的方法來強制刷新一級緩存。

get()方法

get()方法與load()方法的區(qū)別就在于不會查找二級緩存。在當前Session的一級緩存中獲取不到指定的對象時,會直接執(zhí)行查詢語句從數(shù)據(jù)庫中獲得所需要的數(shù)據(jù)。

在Hibernate查詢方法中,可以通過HQL來執(zhí)行對數(shù)據(jù)庫的查詢操作。具體的查詢是由Query對象的list()和iterator()方法來執(zhí)行的。這兩個方法在執(zhí)行查詢時的處理方法存在著一定的差別,在開發(fā)中應該依據(jù)具體的情況來選擇合適的方法。

list()方法

在執(zhí)行Query的list()方法時,Hibernate查詢方法是首先檢查是否配置了查詢緩存,如配置了則從查詢緩存中尋找是否已經對該查詢進行了緩 存,如獲取不到則從數(shù)據(jù)庫中進行獲取。從數(shù)據(jù)庫中獲取到后,Hibernate將會相應地填充一級、二級和查詢緩存。如獲取到的為直接的結果集,則直接返 回,如獲取到的為一些ID的值,則再根據(jù)ID獲取相應的值(Session.load()),最后形成結果集返回。可以看到,在這樣的情況下,list ()方法也是有可能造成N次查詢的。

查詢緩存在數(shù)據(jù)發(fā)生任何變化的情況下都會被自動清空。

iterator()方法

Query的iterator()方法處理查詢的方式與list()方法是不同的,它首先會使用查詢語句得到ID值的列表,然后再使用Session的load()方法得到所需要的對象的值。

在獲取數(shù)據(jù)的時候,應該依據(jù)這4種獲取數(shù)據(jù)方式的特點來選擇合適的方法。在開發(fā)中可以通過設置show_sql選項來輸出Hibernate所執(zhí)行的SQL語句,以此來了解Hibernate查詢方法是如何操作數(shù)據(jù)庫的。


網頁標題:Hibernate查詢方法與緩存的關系
網址分享:http://www.5511xx.com/article/coipejd.html