成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡(jiǎn)述Hibernate三種查詢(xún)的應(yīng)用

開(kāi)發(fā) 后端
Hibernate配備了一種非常強(qiáng)大的Hibernate查詢(xún)語(yǔ)言,這種語(yǔ)言看上去很像SQL。但是不要被語(yǔ)法結(jié)構(gòu) 上的相似所迷惑,HQL是非常有意識(shí)的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵?xún),它可理解如繼承、多態(tài) 和關(guān)聯(lián)之類(lèi)的概念。

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

1. where子句

Hibernate查詢(xún)語(yǔ)言where子句允許你將返回的實(shí)例列表的范圍縮小. 如果沒(méi)有指定別名,你可以使用屬性名來(lái)直接引用屬性:

  1. from Cat where name='Fritz' 

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

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

返回名為(屬性name等于)'Fritz'的Cat類(lèi)的實(shí)例。

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

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

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

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

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

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

=運(yùn)算符不僅可以被用來(lái)比較屬性的值,也可以用來(lái)比較實(shí)例:

  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  

特殊屬性(小寫(xiě))id可以用來(lái)表示一個(gè)對(duì)象的唯一的標(biāo)識(shí)符。(你也可以使用該對(duì)象的屬性名。)

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

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

同樣也可以使用復(fù)合標(biāo)識(shí)符。比如Person類(lèi)有一個(gè)復(fù)合標(biāo)識(shí)符,它由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 

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

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

  1. from Cat cat where cat.class = DomesticCat 

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

  1. store.owner.address.city    // 正確  
  2. store.owner.address         // 錯(cuò)誤! 

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

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

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

2. order by子句

查詢(xún)返回的列表(list)可以按照一個(gè)返回的類(lèi)或組件(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子句

一個(gè)返回聚集值(aggregate values)的查詢(xún)可以按照一個(gè)返回的類(lèi)或組件(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ù)庫(kù)支持的話(例如不能在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).

【編輯推薦】

  1. 簡(jiǎn)述Hibernate部分查詢(xún)語(yǔ)言(一)
  2. Hibernate的重要技術(shù)簡(jiǎn)介
  3. Struts-Spring-Hibernate案例
  4. Hibernate Sessin接口常用方法
  5. Hibernate事務(wù)全面介紹
責(zé)任編輯:仲衡 來(lái)源: redsaga
相關(guān)推薦

2009-09-25 15:58:04

Hibernate對(duì)象

2009-09-22 14:12:16

Hibernate S

2009-09-23 09:16:25

Hibernate復(fù)合

2009-06-23 10:45:18

Hibernate支持

2009-06-29 18:21:29

Hibernate

2009-09-24 10:35:10

Hibernate查詢(xún)

2009-09-25 14:12:16

Hibernate繼承

2009-09-24 10:15:37

Hibernate查詢(xún)

2011-07-25 12:41:38

接入方式布線

2011-06-10 10:43:12

Ubuntu應(yīng)用安裝

2009-09-25 16:57:49

Hibernate查詢(xún)

2009-07-02 09:28:07

Hibernate三種

2009-12-01 09:18:22

Linux版本

2011-01-18 15:35:59

jQueryJavaScriptweb

2011-11-15 09:42:35

云存儲(chǔ)云計(jì)算

2011-04-14 09:36:57

Java

2010-09-08 13:29:48

CSS

2010-01-22 15:49:57

多層交換機(jī)技術(shù)

2009-09-29 16:41:58

Hibernate S

2010-02-06 10:30:11

多層交換機(jī)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久婷婷av | 久久久精品网 | 丝袜天堂 | 国产高清在线精品 | 国产成人精品一区 | 国产精品久久性 | 亚洲精品美女 | 成人毛片视频在线播放 | 国产精品入口麻豆www | 天天操 天天操 | 天堂资源最新在线 | 欧美一区二区三区一在线观看 | 一区二区三区国产精品 | 久草新在线 | 欧美精品1区2区3区 免费黄篇 | 成人久久18免费网站麻豆 | av福利网站 | 欧美一区视频 | 欧美日一区二区 | 国产一区二区三区四区 | 国产精品国产自产拍高清 | 亚洲三区视频 | 播放一级黄色片 | 国产一区二区三区色淫影院 | 免费黄色成人 | av一级毛片 | 国产一区二区三区在线免费 | 午夜精品久久久久久久久久久久久 | av网站免费在线观看 | 激情一区二区三区 | 欧美日韩在线一区 | 国产午夜视频 | 亚洲成人播放器 | 天天插天天狠天天透 | 国产精品女人久久久 | 精品国产高清一区二区三区 | 日韩av在线播 | 欧美一级视频免费看 | 亚洲精品久久久蜜桃网站 | 精品国产乱码一区二区三 | 亚洲最色视频 |