首頁(yè)常見(jiàn)問(wèn)題正文

Hibernate的檢索方式有幾種?

更新時(shí)間:2023-11-16 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  Hibernate的檢索方式主要有五種,包括導(dǎo)航對(duì)象圖檢索方式、OID檢索方式、HQL檢索方式、QBC檢索方式和本地SQL檢索方式,接下里筆者針對(duì)Hibernate五種檢索方式進(jìn)行詳細(xì)講解。

  1.導(dǎo)航對(duì)象圖檢索方式

  導(dǎo)航對(duì)象圖檢索方式是根據(jù)已經(jīng)加載的對(duì)象,導(dǎo)航到其他對(duì)象。它利用類與類之間的關(guān)系檢索對(duì)象。例如,對(duì)于已經(jīng)加載的學(xué)生對(duì)象,就可以利用學(xué)生對(duì)象自動(dòng)導(dǎo)航找到該學(xué)生所對(duì)應(yīng)的班級(jí)的對(duì)象,但前提是需要在對(duì)象關(guān)系映射文件上配置兩者多對(duì)一的關(guān)系。其檢索示例代碼如下所示:

Student student=(Student)session.get(Student.class,1);
Grade grade=student.getGrade();

  2.OID檢索方式

  OID檢索方式是指按照對(duì)象的OID檢索對(duì)象。它使用Session對(duì)象的get()和load()方法加載某一條記錄所對(duì)應(yīng)的對(duì)象,其使用的前提是需要事先知道OID的值。該檢索方式的示例代碼如下所示:

Grade grade1=(Grade)session.get(Grade.class,1);
Grade grade2=(Grade)session.load(Grade.class,1);

  3.HQL檢索方式

  HQL(Hibernate Query Language)是Hibernate查詢語(yǔ)言的簡(jiǎn)稱,它是一種面向?qū)ο蟮牟樵冋Z(yǔ)言,與SQL查詢語(yǔ)言有些類似,但它使用的是類、對(duì)象和屬性的概念,而沒(méi)有表和字段的概念。

  HQL查詢與SQL查詢相比,具有以下優(yōu)點(diǎn)。

  (1)直接針對(duì)實(shí)體類和屬性進(jìn)行查詢,不用再編寫繁瑣的SQL語(yǔ)句。

  (2)查詢結(jié)果直接保存在List集合中,不用再次封裝。

  (3)針對(duì)不同的數(shù)據(jù)庫(kù)會(huì)自動(dòng)生成不同的SQL語(yǔ)句。

  在Hibernate提供的幾種檢索方式中,HQL是官方推薦的查詢語(yǔ)言,也是使用最頻繁的一種檢索方式,其具有以下主要功能。

  (1)在查詢語(yǔ)句中設(shè)定各種查詢條件。

  (2)支持投影查詢,即僅檢索出對(duì)象的部分屬性。

  (3)提供內(nèi)置聚集函數(shù),如sum()、min()和max()。

  (4)支持分組查詢,允許使用group by和having關(guān)鍵字。

  (5)支持分頁(yè)查詢

  (6)支持子查詢,即嵌套查詢。

  (7)支持動(dòng)態(tài)綁定參數(shù)。

  HQL的語(yǔ)法格式與SQL非常相似,并且在Hibernate中專門為HQL提供了一個(gè)Query查詢接口執(zhí)行各種復(fù)雜的查詢語(yǔ)句。HQL的完整語(yǔ)法格式如下所示:

[select/update/delate...] from...[where...] [group by...] [having...] [order by...]
[asc/desc]

  從上述語(yǔ)法格式中可以看出,HQL查詢與SQL查詢非常類似。通常情況下,當(dāng)檢索表中的所有數(shù)據(jù)時(shí),查詢語(yǔ)句中可以省略select關(guān)鍵字,其示例如下所示:

String hql="from User";

  需要注意的是,上述語(yǔ)句中User表示類名,而不是表名,因此需要區(qū)分大小寫,而from關(guān)鍵字不區(qū)分大小寫。

  4.QBC檢索方式

  QBC(Query By Criteria)是Hibernate提供的另一種檢索對(duì)象的方式,它主要由Criteria接口、Criterion接口和Expression類組成,并且支持在運(yùn)行時(shí)動(dòng)態(tài)生成查詢語(yǔ)句。QBC查詢主要由Criteria接口完成,該接口由Session對(duì)象創(chuàng)建,Criterion是Criteria的查詢條件,在Criteria中提供了add(Criterion criterion)方法添加查詢條件。

  以查詢id為1的User對(duì)象為例,使用QBC檢索對(duì)象的示例代碼如下所示:

//創(chuàng)建criteria對(duì)象
Criteria criteria=session.createCriteria(User.class);
//設(shè)定查詢條件
Criterion criterion=Restrictions.eq("id",1);
//添加查詢條件
criteria.add(criterion);
//執(zhí)行查詢,返回查詢結(jié)果
List<User>gs=criteria.list();

  5.本地SQL檢索方式

  本地SQL檢索方式就是使用本地?cái)?shù)據(jù)庫(kù)的SQL查詢語(yǔ)句進(jìn)行查詢。在Hibernate中,SQL查詢是通過(guò)SQLQuery接口表示的,該接口是Query接口的子接口,因此可以調(diào)用Query接口的方法。

  使用本地SQL檢索方式檢索對(duì)象的示例代碼,代碼如下所示:

SQLQuery sqlQuery= session.createSQLQuery("select * from user");


  本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

  作者:黑馬程序員Java培訓(xùn)學(xué)院

  首發(fā):https://java.itheima.com

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!