欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
求教!用hibernate,怎么用count(),sum(),怎么能根據條件查詢(xún),執行語(yǔ)句? Java / 框架、開(kāi)源

11.12.   HQL示例  
  Hibernate查詢(xún)可以非常強大復雜。實(shí)際上,強有力的查詢(xún)語(yǔ)言是Hibernate的主要賣(mài)點(diǎn)之一。下面給出的示例與我在近期實(shí)際項目中使用的一些查詢(xún)很類(lèi)似。請注意你編寫(xiě)的查詢(xún)大部分等都不會(huì )這么復雜!    
   
  下面的查詢(xún)對特定的客戶(hù),根據給定的最小總計值(minAmount),查詢(xún)出所有未付訂單,返回其訂單號、貨品總數、訂單總金額,結果按照總金額排序。在決定價(jià)格的時(shí)候,參考當前目錄。產(chǎn)生的SQL查詢(xún),在ORDER,ORDER_LINE,PRODUCT,CATALOG和PRICE表之間有四個(gè)內部連接和一個(gè)沒(méi)有產(chǎn)生關(guān)聯(lián)的字查詢(xún)。    
   
  select   order.id,   sum(price.amount),   count(item)  
  from   Order   as   order  
          join   order.lineItems   as   item  
          join   item.product   as   product,  
          Catalog   as   catalog  
          join   catalog.prices   as   price  
  where   order.paid   =   false  
          and   order.customer   =   :customer  
          and   price.product   =   product  
          and   catalog.effectiveDate   <   sysdate  
          and   catalog.effectiveDate   >=   all   (  
                  select   cat.effectiveDate    
                  from   Catalog   as   cat  
                  where   cat.effectiveDate   <   sysdate  
          )  
  group   by   order  
  having   sum(price.amount)   >   :minAmount  
  order   by   sum(price.amount)   desc  
  好家伙,真長(cháng)!實(shí)際上,在現實(shí)生活中我并不是非常熱衷于子查詢(xún),所以我的查詢(xún)往往是這樣的:    
   
  select   order.id,   sum(price.amount),   count(item)  
  from   Order   as   order  
          join   order.lineItems   as   item  
          join   item.product   as   product,  
          Catalog   as   catalog  
          join   catalog.prices   as   price  
  where   order.paid   =   false  
          and   order.customer   =   :customer  
          and   price.product   =   product  
          and   catalog   =   :currentCatalog  
  group   by   order  
  having   sum(price.amount)   >   :minAmount  
  order   by   sum(price.amount)   desc  
  下面的查詢(xún)統計付款記錄處于每種狀態(tài)中的數量,要排除所有處于A(yíng)WAITING_APPROVAL狀態(tài)的,或者最近一次狀態(tài)更改是由當前用戶(hù)做出的。它翻譯成SQL查詢(xún)后,在PAYMENT,PAYMENT_STATUS和PAYMENT_STATUS_CHANGE表之間包含兩個(gè)內部連接和一個(gè)用于關(guān)聯(lián)的子查詢(xún)。    
   
  select   count(payment),   status.name    
  from   Payment   as   payment    
          join   payment.currentStatus   as   status  
          join   payment.statusChanges   as   statusChange  
  where   payment.status.name   <>   PaymentStatus.AWAITING_APPROVAL  
          or   (  
                  statusChange.timeStamp   =   (    
                          select   max(change.timeStamp)    
                          from   PaymentStatusChange   change    
                          where   change.payment   =   payment  
                  )  
                  and   statusChange.user   <>   :currentUser  
          )  
  group   by   status.name,   status.sortOrder  
  order   by   status.sortOrder  
  假若我已經(jīng)把statusChange集合映射為一個(gè)列表而不是一個(gè)集合的話(huà),查詢(xún)寫(xiě)起來(lái)會(huì )簡(jiǎn)單很多。    
   
  select   count(payment),   status.name    
  from   Payment   as   payment  
          join   payment.currentStatus   as   status  
  where   payment.status.name   <>   PaymentStatus.AWAITING_APPROVAL  
          or   payment.statusChanges[   maxIndex(payment.statusChanges)   ].user   <>   :currentUser  
  group   by   status.name,   status.sortOrder  
  order   by   status.sortOrder  
  下面的查詢(xún)使用了MS   SQL   Server的isNull()函數,返回當前用戶(hù)所屬的組織所有賬戶(hù)和未付支出。翻譯為SQL查詢(xún)后,在A(yíng)CCOUNT,   PAYMENT,   PAYMENT_STATUS,ACCOUNT_TYPE,   ORGANIZATION   和   ORG_USER表之間有三個(gè)內部連接,一個(gè)外部連接和一個(gè)子查詢(xún)。    
   
  select   account,   payment  
  from   Account   as   account  
          left   outer   join   account.payments   as   payment  
  where   :currentUser   in   elements(account.holder.users)  
          and   PaymentStatus.UNPAID   =   isNull(payment.currentStatus.name,   PaymentStatus.UNPAID)  
  order   by   account.type.sortOrder,   account.accountNumber,   payment.dueDate  
  對某些數據庫而言,我們可能不能依賴(lài)(關(guān)聯(lián)的)子查詢(xún)。    
   
  select   account,   payment  
  from   Account   as   account  
          join   account.holder.users   as   user  
          left   outer   join   account.payments   as   payment  
  where   :currentUser   =   user  
          and   PaymentStatus.UNPAID   =   isNull(payment.currentStatus.name,   PaymentStatus.UNPAID)  
  order   by   account.type.sortOrder,   account.accountNumber,   payment.dueDate  
  Top

9 樓IceCraft(心淡情濃)回復于 2004-10-26 13:03:30 得分 0

第   11   章   Hibernate查詢(xún)語(yǔ)言(Query   Language),   即HQL    
  上一頁(yè)           下一頁(yè)    
   
  --------------------------------------------------------------------------------  
   
  第   11   章   Hibernate查詢(xún)語(yǔ)言(Query   Language),   即HQL  
  Hibernate裝備了一種極為有力的查詢(xún)語(yǔ)言,(有意地)看上去很像SQL。但是別被語(yǔ)法蒙蔽,HQL是完全面向對象的,具備繼承、多態(tài)和關(guān)聯(lián)等特性。    
   
  11.1.   大小寫(xiě)敏感性(Case   Sensitivity)  
  除了Java類(lèi)和屬性名稱(chēng)外,查詢(xún)都是大小寫(xiě)不敏感的。   所以,   SeLeCT   和   sELEct   以及   SELECT   相同的,但是   net.sf.hibernate.eg.FOO   和   net.sf.hibernate.eg.Foo   是不同的,   foo.barSet   和   foo.BARSET也是不同的。    
   
  本手冊使用小寫(xiě)的HQL關(guān)鍵詞。有些用戶(hù)認為在查詢(xún)中使用大寫(xiě)的關(guān)鍵字更加易讀,但是我們認為嵌入在Java代碼中這樣很難看。    
   
  11.2.   from   子句  
  可能最簡(jiǎn)單的Hibernate查詢(xún)是這樣的形式:    
   
  from   eg.Cat  
  它簡(jiǎn)單的返回所有eg.Cat類(lèi)的實(shí)例。    
   
  大部分情況下,你需要賦予它一個(gè)別名(alias),因為你在查詢(xún)的其他地方也會(huì )引用這個(gè)Cat。    
   
  from   eg.Cat   as   cat  
  上面的語(yǔ)句為Cat賦予了一個(gè)別名cat   。所以后面的查詢(xún)可以用這個(gè)簡(jiǎn)單的別名了。as關(guān)鍵字是可以省略的,我們也可以寫(xiě)成這樣:    
   
  from   eg.Cat   cat  
  可以出現多個(gè)類(lèi),結果是它們的笛卡爾積,或者稱(chēng)為“交叉”連接。    
   
  from   Formula,   Parameter  
  from   Formula   as   form,   Parameter   as   param  
  讓查詢(xún)中的別名服從首字母小寫(xiě)的規則,我們認為這是一個(gè)好習慣。這和Java對局部變量的命名規范是一致的。(比如,domesticCat).    
   
  11.3.   聯(lián)合(Associations)和連接(joins)  
  你可以使用join定義兩個(gè)實(shí)體的連接,同時(shí)指明別名。    
   
  from   eg.Cat   as   cat    
          inner   join   cat.mate   as   mate  
          left   outer   join   cat.kittens   as   kitten  
   
  from   eg.Cat   as   cat   left   join   cat.mate.kittens   as   kittens  
   
  from   Formula   form   full   join   form.parameter   param  
  支持的連接類(lèi)型是從ANSI   SQL借用的:    
   
  內連接,inner   join    
   
  左外連接,left   outer   join    
   
  右外連接,right   outer   join    
   
  全連接,full   join   (不常使用)    
   
  inner   join,   left   outer   join   和   right   outer   join   都可以簡(jiǎn)寫(xiě)。    
   
  from   eg.Cat   as   cat    
          join   cat.mate   as   mate  
          left   join   cat.kittens   as   kitten  
  并且,加上   "fetch"后綴的抓取連接可以讓聯(lián)合的對象隨著(zhù)它們的父對象的初始化而初始化,只需要一個(gè)select語(yǔ)句。這在初始化一個(gè)集合的時(shí)候特別有用。它有效地覆蓋了映射文件中對關(guān)聯(lián)和集合的外連接定義。    
   
  from   eg.Cat   as   cat    
          inner   join   fetch   cat.mate  
          left   join   fetch   cat.kittens  
  抓取連接一般不需要賦予別名,因為被聯(lián)合的對象應該不會(huì )在where子句(或者任何其它子句)中出現。并且,被聯(lián)合的對象也不會(huì )在查詢(xún)結果中直接出現。它們是通過(guò)父對象進(jìn)行訪(fǎng)問(wèn)的。    
   
  請注意,目前的實(shí)現中,在一次查詢(xún)中只會(huì )抓取一個(gè)集合(其他的一切都做不到。)(?原文為:only   one   collection   role   may   be   fetched   in   a   query)。也請注意,在使用scroll()或者   iterate()方式調用的查詢(xún)中,是禁止使用fetch構造的。最后,請注意full   join   fetch和right   join   fetch是沒(méi)有意義的。    
   
  11.4.   select子句  
  select子句選擇在結果集中返回哪些對象和屬性。思考一下下面的例子:    
   
  select   mate    
  from   eg.Cat   as   cat    
          inner   join   cat.mate   as   mate  
  這個(gè)查詢(xún)會(huì )選擇出作為其它貓(Cat)朋友(mate)的那些貓。當然,你可以更加直接的寫(xiě)成下面的形式:    
   
  select   cat.mate   from   eg.Cat   cat  
  你甚至可以選擇集合元素,使用特殊的elements功能。下面的查詢(xún)返回所有貓的小貓。    
   
  select   elements(cat.kittens)   from   eg.Cat   cat  
  查詢(xún)可以返回任何值類(lèi)型的屬性,包括組件類(lèi)型的屬性:    
   
  select   cat.name   from   eg.DomesticCat   cat  
  where   cat.name   like   ‘fri%‘  
   
  select   cust.name.firstName   from   Customer   as   cust  
  查詢(xún)可以用元素類(lèi)型是Object[]的一個(gè)數組返回多個(gè)對象和/或多個(gè)屬性。    
   
  select   mother,   offspr,   mate.name    
  from   eg.DomesticCat   as   mother  
          inner   join   mother.mate   as   mate  
          left   outer   join   mother.kittens   as   offspr  
  或者實(shí)際上是類(lèi)型安全的Java對象    
   
  select   new   Family(mother,   mate,   offspr)  
  from   eg.DomesticCat   as   mother  
          join   mother.mate   as   mate  
          left   join   mother.kittens   as   offspr  
  上面的代碼假定Family有一個(gè)合適的構造函數。    
   
  11.5.   統計函數(Aggregate   functions)  
  HQL查詢(xún)可以返回屬性的統計函數的結果。    
   
  select   avg(cat.weight),   sum(cat.weight),   max(cat.weight),   count(cat)  
  from   eg.Cat   cat  
  在select子句中,統計函數的變量也可以是集合。    
   
  select   cat,   count(   elements(cat.kittens)   )    
  from   eg.Cat   cat   group   by   cat  
  下面是支持的統計函數列表:    
   
  avg(...),   sum(...),   min(...),   max(...)    
   
  count(*)    
   
  count(...),   count(distinct   ...),   count(all...)    
   
  distinct   和   all關(guān)鍵字的用法和語(yǔ)義與SQL相同。    
   
  select   distinct   cat.name   from   eg.Cat   cat  
   
  select   count(distinct   cat.name),   count(cat)   from   eg.Cat   cat  
  11.6.   多態(tài)(polymorphism)查詢(xún)  
  類(lèi)似下面的查詢(xún):    
   
  from   eg.Cat   as   cat  
  返回的實(shí)例不僅僅是Cat,也有可能是子類(lèi)的實(shí)例,比如DomesticCat。Hibernate查詢(xún)可以在from子句中使用任何Java類(lèi)或者接口的名字。查詢(xún)可能返回所有繼承自這個(gè)類(lèi)或者實(shí)現這個(gè)接口的持久化類(lèi)的實(shí)例。下列查詢(xún)會(huì )返回所有的持久化對象:    
   
  from   java.lang.Object   o  
  可能有多個(gè)持久化類(lèi)都實(shí)現了Named接口:    
   
  from   eg.Named   n,   eg.Named   m   where   n.name   =   m.name  
  請注意,上面兩個(gè)查詢(xún)都使用了超過(guò)一個(gè)SQL的SELECT。這意味著(zhù)order   by子句將不會(huì )正確排序。(這也意味著(zhù)你不能對這些查詢(xún)使用Query.scroll()。)    
   
  11.7.   where子句  
  where子句讓你縮小你要返回的實(shí)例的列表范圍。    
   
  from   eg.Cat   as   cat   where   cat.name=‘Fritz‘  
  返回所有名字為‘Fritz‘的Cat的實(shí)例。    
   
  select   foo    
  from   eg.Foo   foo,   eg.Bar   bar  
  where   foo.startDate   =   bar.date  
  會(huì )返回所有的滿(mǎn)足下列條件的Foo實(shí)例,它們存在一個(gè)對應的bar實(shí)例,其date屬性與Foo的startDate屬性相等。復合路徑表達式令where子句變得極為有力。思考下面的例子:    
   
  from   eg.Cat   cat   where   cat.mate.name   is   not   null  
  這個(gè)查詢(xún)會(huì )被翻譯為帶有一個(gè)表間(inner)join的SQL查詢(xún)。如果你寫(xiě)下類(lèi)似這樣的語(yǔ)句:    
   
  from   eg.Foo   foo      
  where   foo.bar.baz.customer.address.city   is   not   null  
  你最終會(huì )得到的查詢(xún),其對應的SQL需要4個(gè)表間連接。    
   
  =操作符不僅僅用于判斷屬性是否相等,也可以用于實(shí)例:    
   
  from   eg.Cat   cat,   eg.Cat   rival   where   cat.mate   =   rival.mate  
   
  select   cat,   mate    
  from   eg.Cat   cat,   eg.Cat   mate  
  where   cat.mate   =   mate  
  特別的,小寫(xiě)的id可以用來(lái)表示一個(gè)對象的惟一標識。(你可以使用它的屬性名。)    
   
  from   eg.Cat   as   cat   where   cat.id   =   123  
   
  from   eg.Cat   as   cat   where   cat.mate.id   =   69  
  第二個(gè)查詢(xún)是很高效的。不需要進(jìn)行表間連接!    
   
  組合的標示符也可以使用。假設Person有一個(gè)組合標示符,是由country和medicareNumber組合而成的。    
   
  from   bank.Person   person  
  where   person.id.country   =   ‘AU‘    
          and   person.id.medicareNumber   =   123456  
   
  from   bank.Account   account  
  where   account.owner.id.country   =   ‘AU‘    
          and   account.owner.id.medicareNumber   =   123456  
  又一次,第二個(gè)查詢(xún)不需要表間連接。    
   
  類(lèi)似的,在存在多態(tài)持久化的情況下,特殊屬性class用于獲取某個(gè)實(shí)例的辨識值。在where子句中嵌入的Java類(lèi)名將會(huì )轉換為它的辨識值。    
   
  from   eg.Cat   cat   where   cat.class   =   eg.DomesticCat  
  你也可以指定組件(或者是組件的組件,依次類(lèi)推)或者組合類(lèi)型中的屬性。但是在一個(gè)存在路徑的表達式中,最后不能以一個(gè)組件類(lèi)型的屬性結尾。(這里不是指組件的屬性)。比如,假若store.owner這個(gè)實(shí)體的的address是一個(gè)組件    
   
  store.owner.address.city         //okay  
  store.owner.address                   //error!  
  “任意(any)”類(lèi)型也有特殊的id屬性和class屬性,這可以讓我們用下面的形式來(lái)表達連接(這里AuditLog.item是一個(gè)對應到<ant>的屬性)。    
   
  from   eg.AuditLog   log,   eg.Payment   payment    
  where   log.item.class   =   ‘eg.Payment‘   and   log.item.id   =   payment.id  
  注意上面查詢(xún)中,log.item.class和payment.class會(huì )指向兩個(gè)值,代表完全不同的數據庫字段。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
HQL: Hibernate查詢(xún)語(yǔ)言
第?16?章?HQL: Hibernate 查詢(xún)語(yǔ)言
saveOrupdate與update的作用(講得太清楚了)
HQL語(yǔ)句詳解
Hibernate4實(shí)戰 之 第三部分:Hibernate的基本開(kāi)發(fā)
mysql的查詢(xún)、子查詢(xún)及連接查詢(xún)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久