日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
簡述Hibernate三種查詢的應(yīng)用

Hibernate配備了一種非常強(qiáng)大的Hibernate查詢語言,這種語言看上去很像SQL。本文主要介紹where子句、order by子句、group by子句。但是不要被語法結(jié)構(gòu) 上的相似所迷惑,HQL是非常有意識的被設(shè)計為完全面向?qū)ο蟮牟樵?,它可以理解如繼承、多態(tài) 和關(guān)聯(lián)之類的概念。

蛟河網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)建站2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

1. where子句

Hibernate查詢語言where子句允許你將返回的實例列表的范圍縮小. 如果沒有指定別名,你可以使用屬性名來直接引用屬性:

 
 
 
  1. from Cat where name='Fritz'

如果指派了別名,需要使用完整的屬性名:

 
 
 
  1. from Cat as cat where cat.name='Fritz'

返回名為(屬性name等于)'Fritz'的Cat類的實例。

 
 
 
  1. select foo 
  2. from Foo foo, Bar bar
  3. where foo.startDate = bar.date

將返回所有滿足下面條件的Foo類的實例: 存在如下的bar的一個實例,其date屬性等于 Foo的startDate屬性。 復(fù)合路徑表達(dá)式使得where子句非常的強(qiáng)大,考慮如下情況:

 
 
 
  1. from Cat cat where cat.mate.name is not null

該Hibernate查詢將被翻譯成為一個含有表連接(內(nèi)連接)的SQL查詢。如果你打算寫像這樣的查詢語句

 
 
 
  1. from Foo foo  
  2. where foo.bar.baz.customer.address.city is not null

在SQL中,你為達(dá)此目的將需要進(jìn)行一個四表連接的查詢。

=運算符不僅可以被用來比較屬性的值,也可以用來比較實例:

 
 
 
  1. from Cat cat, Cat rival where cat.mate = rival.mate
  2. select cat, mate 
  3. from Cat cat, Cat mate
  4. where cat.mate = mate

特殊屬性(小寫)id可以用來表示一個對象的唯一的標(biāo)識符。(你也可以使用該對象的屬性名。)

 
 
 
  1. from Cat as cat where cat.id = 123
  2. from Cat as cat where cat.mate.id = 69

第二個查詢是有效的。此時不需要進(jìn)行表連接!

同樣也可以使用復(fù)合標(biāo)識符。比如Person類有一個復(fù)合標(biāo)識符,它由country屬性 與medicareNumber屬性組成。

 
 
 
  1. from bank.Person person
  2. where person.id.country = 'AU' 
  3.     and person.id.medicareNumber = 123456
  4. from bank.Account account
  5. where account.owner.id.country = 'AU' 
  6.     and account.owner.id.medicareNumber = 123456

第二個查詢也不需要進(jìn)行表連接。

同樣的,特殊屬性class在進(jìn)行多態(tài)持久化的情況下被用來存取一個實例的鑒別值(discriminator value)。 一個嵌入到where子句中的Java類的名字將被轉(zhuǎn)換為該類的鑒別值。

 
 
 
  1. from Cat cat where cat.class = DomesticCat

你也可以聲明一個屬性的類型是組件或者復(fù)合用戶類型(以及由組件構(gòu)成的組件等等)。永遠(yuǎn)不要嘗試使用以組件類型來結(jié)尾的路徑表達(dá)式(path-expression) (與此相反,你應(yīng)當(dāng)使用組件的一個屬性來結(jié)尾)。 舉例來說,如果store.owner含有一個包含了組件的實體address

 
 
 
  1. store.owner.address.city    // 正確
  2. store.owner.address         // 錯誤!

一個“任意”類型有兩個特殊的屬性id和class, 來允許我們按照下面的方式表達(dá)一個連接(AuditLog.item 是一個屬性,該屬性被映射為 )。

 
 
 
  1. from AuditLog log, Payment payment 
  2. where log.item.class = 'Payment' and log.item.id = payment.id

注意,在上面的查詢與句中,log.item.class 和 payment.class 將涉及到完全不同的數(shù)據(jù)庫中的列。

2. order by子句

查詢返回的列表(list)可以按照一個返回的類或組件(components)中的任何屬性(property)進(jìn)行排序:

 
 
 
  1. from DomesticCat cat
  2. order by cat.name asc, cat.weight desc, cat.birthdate

可選的asc或desc關(guān)鍵字指明了按照升序或降序進(jìn)行排序.

 
 
 
  1. select cat.color, sum(cat.weight), count(cat) 
  2. from Cat cat
  3. group by cat.color
  4. select foo.id, avg(name), max(name) 
  5. from Foo foo join foo.names name
  6. group by foo.id

3. group by子句

一個返回聚集值(aggregate values)的查詢可以按照一個返回的類或組件(components)中的任何屬性(property)進(jìn)行分組:

 
 
 
  1. select cat.color, sum(cat.weight), count(cat) 
  2. from Cat cat
  3. group by cat.color 
  4. having cat.color in (eg.Color.TABBY, eg.Color.BLACK)

having子句在這里也允許使用.

  
  
  
  1. select cat.color, sum(cat.weight), count(cat) 
  2. from Cat cat
  3. group by cat.color 
  4. having cat.color in (eg.Color.TABBY, eg.Color.BLACK)

如果底層的數(shù)據(jù)庫支持的話(例如不能在MySQL中使用),SQL的一般函數(shù)與聚集函數(shù)也可以出現(xiàn) 在having與order by 子句中。

  
  
  
  1. select cat
  2. from Cat cat
  3.     join cat.kittens kitten
  4. group by cat
  5. having avg(kitten.weight) > 100
  6. order by count(kitten) asc, sum(kitten.weight) desc

注意group by子句與 order by子句中都不能包含算術(shù)表達(dá)式(arithmetic expressions).


網(wǎng)頁題目:簡述Hibernate三種查詢的應(yīng)用
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/djcshho.html