Hibernate检索1
Hibernate 的關(guān)聯(lián)關(guān)系,通過(guò)關(guān)聯(lián)關(guān)系能夠?qū)?shù)據(jù)庫(kù)表進(jìn)行簡(jiǎn)單的操作。在大多數(shù)應(yīng)用中,查詢屬于最重要的部分,而目前我們只能使用get方法和 load方法進(jìn)行簡(jiǎn)單的查詢,本章將主要講解Hibernate的查詢操作。?
Hibernate 支持兩種主要的查詢方式。強(qiáng)大且易于使用的面向?qū)ο蟛樵冋Z(yǔ)言 HQL(Hibernate Query Language)。和Criteria查詢。以及使用原生 SQL (native SQL)描述 Hibernate 查詢。其中HQL是使用較為廣泛的方式,也是我們本章學(xué)習(xí)的重點(diǎn)。
核心技能部分
1.1??Hibernate檢索
在Hibernate 中,檢索對(duì)象的方式包括:
(1)導(dǎo)航圖:根據(jù)已經(jīng)加載的對(duì)象,導(dǎo)航到其他對(duì)象。例如,對(duì)于已經(jīng)加載的Customer對(duì)象,調(diào)用它的getOrders().iterator()方法就可以導(dǎo)航到所有關(guān)聯(lián)的Order對(duì)象,假如在關(guān)聯(lián)級(jí)別使用了延遲加載檢索策略,那么首次執(zhí)行此方法時(shí),Hibernate會(huì)從數(shù)據(jù)庫(kù)中加載關(guān)聯(lián)的Order對(duì)象,否則就從緩存中取得Order對(duì)象。?
(2)OID:按照對(duì)象的OID來(lái)檢索對(duì)象。Session的get()和load()方法提供了這種功能。如果在應(yīng)用程序中事先知道了OID,就可以使用這種檢索對(duì)象的方式。
(3)HQL:Hibernate Query Language,它是完全面向?qū)ο蟮牟樵冋Z(yǔ)句,查詢功能非常強(qiáng)大,具備繼承、多態(tài)和關(guān)聯(lián)等特性。Hibernate官方推薦使用HQL進(jìn)行查詢。
(4)QBC:Query By Criteria,以對(duì)象的方式進(jìn)行查詢,將查詢語(yǔ)句封裝為對(duì)象操作。優(yōu)點(diǎn):可讀性好,符合Java 程序員的編碼習(xí)慣。缺點(diǎn):不夠成熟,不支持投影(projection)或統(tǒng)計(jì)函數(shù)(aggregation)。
(5)本地查詢:使用本地?cái)?shù)據(jù)庫(kù)的SQL查詢語(yǔ)句。
1.2?HQL簡(jiǎn)介
1.2.1?為什么使用HQL
現(xiàn)在我們回憶一下我們?cè)谇耙徽聦W(xué)習(xí)中所遇到的查詢問(wèn)題,如何查詢所有的版塊?如何查詢指定標(biāo)題的帖子?顯然是用我們已經(jīng)掌握的get 或者load 這樣的以id為條件進(jìn)行查詢的方式是無(wú)法做到的,是用HQL就可以輕松解決這樣的問(wèn)題。
現(xiàn)在我們使用HQL來(lái)檢索所有的名稱為鬼吹燈的帖子,代碼如示例4.1所示。
示例4.1
@Testpublic void hqlQuery1() throws Exception {String hql="from Thread as t where t.title like '%鬼吹燈%'";Query query = session.createQuery(hql);List<Thread> list = query.list();for(Thread t : list){System.out.println("帖子名稱:"+t.getTitle()+" 內(nèi)容:"+t.getContent());}我們?cè)倩貞浺幌率褂?/span>JDBC完成這一查詢的情況,jdbc是面向數(shù)據(jù)庫(kù)表的查詢,查詢出來(lái)的是一行行數(shù)據(jù) 一個(gè)一個(gè)的字段,還需要手工進(jìn)行繁瑣的數(shù)據(jù)提取和封裝,才能得到我們需要的對(duì)象集合,而使用HQL則可以避免JDBC的這些弊端,提供了更簡(jiǎn)便和強(qiáng)大的對(duì)象化查詢能力,而且HQL還是獨(dú)立與數(shù)據(jù)庫(kù)的,HQL語(yǔ)句不與具體數(shù)據(jù)庫(kù)產(chǎn)品耦合。HQL具有以下功能:
(1)支持在查詢語(yǔ)句中設(shè)定查詢條件,動(dòng)態(tài)綁定參數(shù)。
(2)支持投影查詢。
(3)支持分頁(yè)查詢。
(4)支持連接查詢。
(5)支持分組查詢,能夠使用關(guān)鍵字having和group by。
(6)內(nèi)置聚集函數(shù),如sum()、min()、max()等。
(7)可以調(diào)用用戶自定義函數(shù)。
(8)支持子查詢。
1.2.2?HQL入門
從示例4.1中我們可以總結(jié)出使用HQL的四個(gè)步驟:
1.?獲取session。
2.?編寫HQL語(yǔ)句。
3.?創(chuàng)建Query對(duì)象。
4.?執(zhí)行查詢,獲取結(jié)果。
HQL的完整的語(yǔ)法:
?
[select/update/delete...][from...][where...][ group by...][having...]?[ order by . . . ]
HQL的語(yǔ)法和SQL非常的相似,但是不要被語(yǔ)法結(jié)構(gòu)上的相似所迷惑,HQL具有鮮明的面向?qū)ο蟛樵兊奶卣?#xff0c;HQL是非常有意識(shí)的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵?#xff0c;它可以理解如繼承、多態(tài) 和關(guān)聯(lián)之類的概念。在上例"from Thread as ?t ?where t.title ?like '%鬼吹燈%'"??中 Thread是類名而不是表名,title是Thread的屬性名而不是字段名,查詢出的也都是對(duì)象,在HQL的世界里沒(méi)有數(shù)據(jù)庫(kù)、沒(méi)有表字段,有的只是對(duì)象。這就是HQL和SQL的本質(zhì)區(qū)別,也是需要重點(diǎn)理解和掌握的。
HQL還有一些基本的語(yǔ)法規(guī)則需要了解:
?HQL語(yǔ)句的關(guān)鍵字不區(qū)分大小寫,但推薦小寫。
?HQL中出現(xiàn)的類名,屬性名嚴(yán)格區(qū)分大小寫。
?可以為類設(shè)置別名,以供其他地方引用,例如 上例中的 as t。
?as 關(guān)鍵字是可選的, 一般別名推薦小寫。
?from前也可以加select 但必須配合別名使用。
HQL非常的強(qiáng)大與復(fù)雜。實(shí)際上,Hibernate的一個(gè)主要賣點(diǎn)就是查詢語(yǔ)句的威力。下面我們會(huì)向大家一一介紹。
1.3?實(shí)體查詢
根據(jù)上述HQL的查詢步驟,編寫一個(gè)最簡(jiǎn)單的查詢,代碼如示例4.2所示。
示例4.2
String hql = “from Thread”;Query query = session.createQuery(hql);List< Thread> List = query. list ( );for ( Thread t : List ) {System.out.println("名稱:”+t getTitle());}上述代碼中,hql = “from Thread”將取出?Thread對(duì)象所對(duì)應(yīng)表的全部記錄,對(duì)應(yīng)的?SQL語(yǔ)句為:?Select * from ?tip。
HQL還支持多態(tài)查詢,如果實(shí)體之間存在繼承關(guān)系,那么from Thread將會(huì)查詢出所有的Thread和他的子類數(shù)據(jù)。例如 from java.lang.Object 將會(huì)返回所有的數(shù)據(jù)庫(kù)表數(shù)據(jù)。
與?SQL語(yǔ)句相同,HQL也支持where子句。例如示例4.1中的"from Thread as ?t ?where t.title ?like '%鬼吹燈%'"。
Hibernate 的?HQL查詢支持與SQL相同的各種運(yùn)算,詳見(jiàn)表 4-1-1所示。
表 4-1-1???HQL 支持的各種運(yùn)算
運(yùn)算類型 | HQL運(yùn)算符 | 含義 |
比較運(yùn)算 | = | 等于 |
<> | 不等于 | |
> | 大于 | |
>= | 大于等于 | |
< | 小于 | |
<= | 小于等于 | |
Is null | 為空 | |
Is not null | 不為空 | |
范圍運(yùn)算 | In | 等于列表中的某一個(gè)值 |
Not in | 不能與列表中的任意一個(gè)值 | |
Between value1 and value2 | 大于等于值1,小于等于值2 | |
Not between value1 and value2 | 小于值1或者大于值2 | |
字符串模式匹配 | Like | 字符串模式匹配 |
邏輯運(yùn)算 | and | 邏輯與 |
Or | 邏輯或 | |
Not | 邏輯非 |
我們可以通過(guò)這些操作符為where子句指定條件,也可以通過(guò)and 、or等邏輯連接符組合各個(gè)條件,代碼如示例4.3所示。
示例4.3
@Testpublic void hqlQuery2() throws Exception {String hql="from Thread as t where t.title like '%鬼吹燈%' and t.dateCreated>'2010-07-10'";Query query = session.createQuery(hql);List<Thread> list = query.list();for(Thread t : list){System.out.println("帖子名稱:"+t.getTitle()+" 內(nèi)容:"+t.getContent());}}這些操作符的使用和SQL都沒(méi)什么區(qū)別,只需要把握HQL面向?qū)ο蟮木窦纯?#xff0c;這里不再贅述。
1.4?屬性查詢
現(xiàn)在我們使用HQL可以輕松的查詢到我們需要的對(duì)象,但在某些情況下,我們并不需要取得完整的實(shí)體對(duì)象,如在下拉列表中顯示出版塊的名稱,或者在加載帖子列表的時(shí)候,我們只需要帖子的標(biāo)題等信息 而例如content這樣比較大的屬性并不需要加載,此時(shí)我們需要的數(shù)據(jù)可能僅僅是對(duì)象的某一個(gè)或者某幾個(gè)屬性,通過(guò)HQL我們可以輕松的做到這一點(diǎn)!代碼如示例4.4所示。
示例4.4
@Testpublic void hqlQuery3() throws Exception {String hql="select t.title from Thread as t";Query query = session.createQuery(hql);List<String> list= query.list();for(String title: list){System.out.println("帖子標(biāo)題:"+title);}}單一屬性查詢,返回結(jié)果集屬性列表,元素類型和實(shí)體類中相應(yīng)的屬性類型一致,但如果是對(duì)多個(gè)屬性的查詢HQL查詢返回的結(jié)果又是什么呢?,多個(gè)屬性的查詢?nèi)缡纠?/span>4.5所示。
示例4.5
@Testpublic void hqlQuery3() throws Exception {String hql="select t.title,t.dateCreated from Thread as t";Query query = session.createQuery(hql);List<Object[]> list = query.list();for(Object[] objects: list){System.out.println("帖子標(biāo)題:"+objects[0]+" 發(fā)布時(shí)間:"+objects[1]);}}多個(gè)屬性查詢,返回的集合元素是對(duì)象數(shù)組,數(shù)組元素的類型和對(duì)應(yīng)的屬性在實(shí)體類中的類型一致,數(shù)組的長(zhǎng)度取決于select中屬性的個(gè)數(shù)。
另外還有一種更加面向?qū)ο蠡膶傩圆樵兎绞?/span> 如示例4.6所示。
示例4.6
@Testpublic void hqlQuery5() throws Exception {String hql="select new Thread(th.title,th.hit) from Thread as th";Query query = session.createQuery(hql);List<Thread> list = query.list();for(Thread t: list){System.out.println("標(biāo)題:"+t.getTitle()+" 點(diǎn)擊量:"+t.getHit());}}這種方式能夠在HQL語(yǔ)句中動(dòng)態(tài)的構(gòu)造對(duì)象,并封裝我們所需要的屬性數(shù)據(jù),這時(shí)候list中保持的是對(duì)象,使用這種方式需要注意以下兩點(diǎn):
?類必須有相應(yīng)的構(gòu)造函數(shù)。
?除了在構(gòu)造的時(shí)候賦予的屬性值外,其他屬性都是null。
?在MySQL數(shù)據(jù)庫(kù)中如果是日期類型,譬如:dateCreated,實(shí)體類的屬性應(yīng)是java.util.Date,在構(gòu)造方法中對(duì)其賦值。MyEclipse生成的是java.sql.Timestamp類型的。
1.5?參數(shù)綁定
在前面的應(yīng)用中,我們的查詢條件都是直接在HQL中表達(dá),例如:select info from Thread as info where info.goodsName='手機(jī)',在實(shí)際應(yīng)用中查詢的條件肯定是在不斷變化的,解決這個(gè)問(wèn)題的最直接辦法就是拼接字符串,但這種方式很容易遭到SQL注入的攻擊,安全性很差而且執(zhí)行效率低。現(xiàn)在我們回憶一下在JDBC中是如何解決這個(gè)問(wèn)題的?
在JDBC中我們是使用PrepareStatement對(duì)象進(jìn)行了參數(shù)的動(dòng)態(tài)綁定,HQL也提供了類似的參數(shù)綁定方式。
HQL中的參數(shù)綁定主要有三種形式:
?按位置綁定。
?按名稱綁定。
?封裝參數(shù)。
4.5.1 按照位置綁定
代碼如示例4.7所示。
示例4.7
@Testpublic void hqlQuery6() throws Exception {String hql="from Thread as th where th.topped=? and th.title like ?";Query query = session.createQuery(hql);query.setBoolean(0,true);query.setString(1, "%鬼吹燈%");List<Thread> list = query.list();for(Thread th: list){System.out.println("標(biāo)題:"+th.getTitle()+" 置頂:"+th.getTopped());}}使用這種方式綁定參數(shù)需要注意如下幾點(diǎn):
?必須按照參數(shù)的順序,調(diào)用相應(yīng)的setType()方法賦值。
?參數(shù)的下標(biāo)從0開(kāi)始。
?如果有多個(gè)參數(shù)的時(shí)候,必須保證每個(gè)參數(shù)都被綁定值。
4.5.2 按照名稱綁定
代碼如示例4.8所示。
示例4.8
@Testpublic void hqlQuery7() throws Exception {String hql="from Thread as th where th.topped=:top and th.title like :name";Query query = session.createQuery(hql);query.setBoolean("top",true);query.setString("name","%鬼吹燈%");List<Thread> list = query.list();for(Thread th: list){System.out.println("標(biāo)題:"+th.getTitle()+" 置頂:"+th.getTopped());}}使用按照名稱進(jìn)行綁定,請(qǐng)注意以下幾點(diǎn):
?在HQL查詢語(yǔ)句中定義命名參數(shù)時(shí)以?“:”開(kāi)頭。
?Query提供的方法能綁定各種類型的參數(shù)。此類?setXXX()方法中,第一個(gè)參數(shù)用于設(shè)置各種類型的命名參數(shù),第二個(gè)參數(shù)表示命名參數(shù)的值。
這種方式有比較好的可讀性,可以避免因大意而產(chǎn)生的參數(shù)順序錯(cuò)誤。
4.5.3 封裝參數(shù)
當(dāng)需要綁定的參數(shù)非常多,那么無(wú)論使用按位置,還是按名稱綁定參數(shù)都會(huì)非常的繁瑣,HQL中提供了第三種方式進(jìn)行參數(shù)的綁定。即先將參數(shù)值封裝到bean中,然后將bean與Query進(jìn)行綁定。代碼如示例4.9所示。
示例4.9
@Testpublic void hqlQuery8() throws Exception {String hql="from Thread as th where th.title like :title and "+"th.hit between:low_hit and :high_hit and th.replyCount>:rcount and th.topped=:top";Query query = session.createQuery(hql);Map queryProperties = new HashMap();queryProperties.put("title","%java%");queryProperties.put("high_hit",100000);queryProperties.put("low_hit",10);queryProperties.put("rcount",10);queryProperties.put("top",false);query.setProperties(queryProperties);List<Thread> list = query.list();for(Thread th: list){System.out.println("標(biāo)題:"+th.getTitle()+" 點(diǎn)擊量:"+th.getHit()+" 回帖:"+th.getReplyCount());}}這種方式一定要注意封裝參數(shù)值的bean中的屬性名一定要和HQL語(yǔ)句中的命名參數(shù)名稱一致,這樣Hibernate才能根據(jù)名稱進(jìn)行匹配。
1.6?使用聚合函數(shù)
HQL中聚合函數(shù)的使用和SQL中基本一致。
1.6.1?count()
查詢指定用戶所發(fā)布的帖子總數(shù),代碼如示例4.10所示。
示例4.10
@Testpublic void hqlQuery9() throws Exception {String hql="select count(th) from Thread as th where th.author.id=1";Query query = session.createQuery(hql);Long count=(Long) query.uniqueResult();System.out.println("用戶發(fā)帖: "+count);}本例中使用了count()函數(shù)來(lái)計(jì)算總數(shù),顯然查詢的結(jié)果不肯能有多個(gè),這個(gè)時(shí)候再使用list方法求的集合,并從中取得數(shù)據(jù),就顯得很繁瑣,這時(shí)候可以使用uniqueResult()來(lái)取得唯一結(jié)果,這里需要注意的是,如果返回的結(jié)果大于1個(gè)本方法將會(huì)拋出異常。
1.6.2?max()和 min()
求得所有帖子中最大,最小點(diǎn)擊量。代碼如示例4.11所示。
示例4.11
@Testpublic void hqlQuery10() throws Exception {String hql="select max(th.hit),min(th.hit)from Thread as th";Query query = session.createQuery(hql);List<Object[]> list = query.list();Object[] object = list.get(0);System.out.println("單貼最高點(diǎn)擊: "+object[0]);System.out.println("單貼最低點(diǎn)擊: "+object[1]);}1.6.3?avg()和 sum()
求userid=1的用戶所發(fā)布信息的總點(diǎn)擊量和平均點(diǎn)擊量,代碼如示例4.12所示。
示例4.12
@Testpublic void hqlQuery11() throws Exception {String hql="select avg(th.hit),sum(th.hit)from Thread as th where th.author.id=1";Query query = session.createQuery(hql);List<Object[]> list = query.list();Object[] object = list.get(0);System.out.println("平均點(diǎn)擊量: "+object[0]);System.out.println("總點(diǎn)擊量: "+object[1]);}1.7?排序
與?SQL相同,HQL可以通過(guò)order by子句實(shí)現(xiàn)對(duì)查詢結(jié)果的排序,代碼如下。
??from ?Thread ?as ?th??order ?by ?th.datecreated??desc;
order by子句可以指定多個(gè)排序條件,測(cè)試代碼如下。
?from Thread ?as ?th ?order by th?. hit ,th. datecreated?desc;
1.8?分組
HQL也可以像SQL一樣使用group by子句進(jìn)行分組統(tǒng)計(jì),例如 我們根據(jù)帖子類型進(jìn)行數(shù)量統(tǒng)計(jì)。代碼如示例4.13所示。
示例4.13
@Testpublic void hqlQuery12() throws Exception {String hql = "select count (th) , th.type from Thread as th group by th.type";Query query = session.createQuery(hql);List< Object[]> list = query.list();for(Object[] objects : list){System.out.println( "數(shù)量:"+objects[0]+"類型: "+objects[1] );}}having子句可以對(duì)group by子句進(jìn)行甄選。例如,對(duì)帖子數(shù)量大于8的種類的分類統(tǒng)計(jì),代碼如示例4.14所示。
示例4.14
@Testpublic void hqlQuery13() throws Exception {String hql = "select count (th) , th.type from Thread as th group by th.type having count(th)>8";Query query = session.createQuery(hql);List< Object[]> list = query.list();for(Object[] objects : list){System.out.println( "數(shù)量:"+objects[0]+"類型: "+objects[1] );}}1.9?分頁(yè)查詢
使用JDBC進(jìn)行數(shù)據(jù)庫(kù)的分頁(yè)查詢的語(yǔ)句很復(fù)雜,而且每種數(shù)據(jù)庫(kù)產(chǎn)品都有特有的分頁(yè)語(yǔ)句,程序與具體數(shù)據(jù)庫(kù)綁定,造成系統(tǒng)的移植和擴(kuò)展困難,而Hibernate為我們提供了簡(jiǎn)便、統(tǒng)一的分頁(yè)方式,主要通過(guò)Query的以下兩個(gè)方法實(shí)現(xiàn):
??setFirstResult(int firstResult):設(shè)定從哪一個(gè)對(duì)象開(kāi)始檢索,參數(shù)firstResult表示這個(gè)對(duì)象在查詢結(jié)果中的索引位置,索引位置的起始值為0。默認(rèn)情況下,Query接口從查詢結(jié)果中的第一個(gè)對(duì)象,也就是索引位置為0的對(duì)象開(kāi)始檢索。
??setMaxResult(int maxResults):設(shè)定一次最多檢索出的對(duì)象數(shù)目。默認(rèn)情況下,Query接口檢索出查詢結(jié)果中所有的對(duì)象。
具體代碼如示例4.15所示。
示例4.15
Query query =session.createQuery("from?Thread ?as th?");
query.setFirstResult(0);
query.setMaxResults(10);
List result = query.list();
?
1.10?子查詢
對(duì)于支持子查詢的數(shù)據(jù)庫(kù),Hibernate支持在查詢中使用子查詢。他可以在查詢中使用另外一條查詢的結(jié)果,一個(gè)子查詢必須出現(xiàn)在where子句中且被圓括號(hào)包圍起來(lái)(經(jīng)常是SQL聚集函數(shù)的圓括號(hào))甚至相互關(guān)聯(lián)的子查詢(引用到外部查詢中的別名的子查詢)也是允許的。
查詢點(diǎn)擊量最大的帖子。代碼如示例4.16所示。
示例4.16
@Test
public void hqlQuery14() throws Exception {
String hql = "select th from Thread as th where th.hit=(select max(hit) from Thread)";
????Query query = session.createQuery(hql);
????List< Thread> list = query.list();
????for(Thread th : list){
???? ??System.out.println( "點(diǎn)擊量:"+th.getHit()+"帖子標(biāo)題: "+th.getTitle() );
????}
}
運(yùn)行后控制臺(tái)輸出如圖4.1.11所示。
?
圖4.1.11 子查詢
本章總結(jié)
?
??Hibernate 中,檢索對(duì)象的方式
n?導(dǎo)航圖:根據(jù)已經(jīng)加載的對(duì)象,導(dǎo)航到其他對(duì)象。
n?OID:按照對(duì)象的OID來(lái)檢索對(duì)象。Session的get()和load()方法
n?HQL:Hibernate Query Language
n?QBC:Query By Criteria
n?本地查詢:使用本地?cái)?shù)據(jù)庫(kù)的SQL查詢語(yǔ)句。
?HQL
n?HQL實(shí)體查詢
n?HQL屬性查詢
n?HQL參數(shù)綁定
n?HQL實(shí)現(xiàn)查詢排序
n?HQL實(shí)現(xiàn)查詢分組
n?HQL實(shí)現(xiàn)查詢分頁(yè)
選擇題
1. setMaxResults(3)方法中,參數(shù)值3是指( )。
????A. 從第?3條記錄開(kāi)始
????B. 從第4條記錄開(kāi)始
????C. 查詢?3條記錄
????D. 查詢4條記錄
2.?在Hibernate 中,下面代碼實(shí)現(xiàn)了對(duì)Book實(shí)體中title屬性的模糊查詢說(shuō)法正確的是?( )。
Session session=this.getSession ( );??????????????????????
String ?hql=”from ?Book ?model ?where ?modeL. title like?”;??// (1)
Query query =session.createQuery (hql );// (2)
query.setString(0,“%張明%”);// (3)
List list = query.list ( );// (4)
A. 第(1)行中,Book與?model之間必須有as關(guān)鍵字
B. 第(2)行中沒(méi)有錯(cuò)誤
C. 第(3)行應(yīng)該為:query.setString(0,“張明”);
D. 第(4)行應(yīng)該為:List llist = query.executeQuery();
3. 關(guān)于HQL查詢,下面說(shuō)法中錯(cuò)誤的是()。
????A. HQL查詢的?select子句中必須區(qū)分大小寫
????B. HQL支持統(tǒng)計(jì)函數(shù)
????C. HQL支持僅查詢對(duì)象的某幾個(gè)屬性,查詢結(jié)果保存于Object數(shù)組中
????D. HQL語(yǔ)句可以實(shí)現(xiàn)類似PreparedStatement 的效果
4. 下面代碼的執(zhí)行效果是()。
String hql=”from Student s order by s.score asc”;
Query query = session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResult(5);
return query.list();
A.返回分?jǐn)?shù)最高的五個(gè)學(xué)生。
B. ?返回分?jǐn)?shù)最高的六個(gè)學(xué)生。
C.返回分?jǐn)?shù)最低的五個(gè)學(xué)生。
D. ?返回分?jǐn)?shù)最低的六個(gè)學(xué)生。
5. 下面HQL語(yǔ)句的含義是()。
Select stu ?from Student stu where stu.score>(select avg(score) from Student)
A. 查詢所有學(xué)生的平均分。
B. ??查詢得分大于平均分的學(xué)生成績(jī)。
C. 查詢得分最高的學(xué)生。
D. ? 查詢得分大于平均分的學(xué)生
上機(jī)練習(xí)
在上機(jī)的基礎(chǔ)上完成對(duì)帖子的回復(fù)功能 ,點(diǎn)擊帖子可以分頁(yè)顯示帖子的詳細(xì)內(nèi)容和他的所有回復(fù),并在添加回復(fù)后及時(shí)更新帖子的最后回復(fù)時(shí)間和版塊的最后回復(fù)。
總結(jié)
以上是生活随笔為你收集整理的Hibernate检索1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hibernate 注解配置
- 下一篇: 大数据 机器学习 算法概论