更新時間:2023-11-16 來源:黑馬程序員 瀏覽量:
Hibernate的檢索方式主要有五種,包括導航對象圖檢索方式、OID檢索方式、HQL檢索方式、QBC檢索方式和本地SQL檢索方式,接下里筆者針對Hibernate五種檢索方式進行詳細講解。
導航對象圖檢索方式是根據已經加載的對象,導航到其他對象。它利用類與類之間的關系檢索對象。例如,對于已經加載的學生對象,就可以利用學生對象自動導航找到該學生所對應的班級的對象,但前提是需要在對象關系映射文件上配置兩者多對一的關系。其檢索示例代碼如下所示:
Student student=(Student)session.get(Student.class,1); Grade grade=student.getGrade();
OID檢索方式是指按照對象的OID檢索對象。它使用Session對象的get()和load()方法加載某一條記錄所對應的對象,其使用的前提是需要事先知道OID的值。該檢索方式的示例代碼如下所示:
Grade grade1=(Grade)session.get(Grade.class,1); Grade grade2=(Grade)session.load(Grade.class,1);
HQL(Hibernate Query Language)是Hibernate查詢語言的簡稱,它是一種面向對象的查詢語言,與SQL查詢語言有些類似,但它使用的是類、對象和屬性的概念,而沒有表和字段的概念。
HQL查詢與SQL查詢相比,具有以下優點。
(1)直接針對實體類和屬性進行查詢,不用再編寫繁瑣的SQL語句。
(2)查詢結果直接保存在List集合中,不用再次封裝。
(3)針對不同的數據庫會自動生成不同的SQL語句。
在Hibernate提供的幾種檢索方式中,HQL是官方推薦的查詢語言,也是使用最頻繁的一種檢索方式,其具有以下主要功能。
(1)在查詢語句中設定各種查詢條件。
(2)支持投影查詢,即僅檢索出對象的部分屬性。
(3)提供內置聚集函數,如sum()、min()和max()。
(4)支持分組查詢,允許使用group by和having關鍵字。
(5)支持分頁查詢
(6)支持子查詢,即嵌套查詢。
(7)支持動態綁定參數。
HQL的語法格式與SQL非常相似,并且在Hibernate中專門為HQL提供了一個Query查詢接口執行各種復雜的查詢語句。HQL的完整語法格式如下所示:
[select/update/delate...] from...[where...] [group by...] [having...] [order by...] [asc/desc]
從上述語法格式中可以看出,HQL查詢與SQL查詢非常類似。通常情況下,當檢索表中的所有數據時,查詢語句中可以省略select關鍵字,其示例如下所示:
String hql="from User";
需要注意的是,上述語句中User表示類名,而不是表名,因此需要區分大小寫,而from關鍵字不區分大小寫。
QBC(Query By Criteria)是Hibernate提供的另一種檢索對象的方式,它主要由Criteria接口、Criterion接口和Expression類組成,并且支持在運行時動態生成查詢語句。QBC查詢主要由Criteria接口完成,該接口由Session對象創建,Criterion是Criteria的查詢條件,在Criteria中提供了add(Criterion criterion)方法添加查詢條件。
以查詢id為1的User對象為例,使用QBC檢索對象的示例代碼如下所示:
//創建criteria對象 Criteria criteria=session.createCriteria(User.class); //設定查詢條件 Criterion criterion=Restrictions.eq("id",1); //添加查詢條件 criteria.add(criterion); //執行查詢,返回查詢結果 List<User>gs=criteria.list();
本地SQL檢索方式就是使用本地數據庫的SQL查詢語句進行查詢。在Hibernate中,SQL查詢是通過SQLQuery接口表示的,該接口是Query接口的子接口,因此可以調用Query接口的方法。
使用本地SQL檢索方式檢索對象的示例代碼,代碼如下所示:
SQLQuery sqlQuery= session.createSQLQuery("select * from user");
本文版權歸黑馬程序員Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:黑馬程序員Java培訓學院