Hibernate對多表關聯查詢

fmms 12年前發布 | 33K 次閱讀 Hibernate 持久層框架

一、 Hibernate簡介
     Hibernate是一個JDO工具。它的工作原理是通過文件(一般有兩種:xml文件和properties文件)把值對象和數據庫表之間建立起一個映射關系。這樣,我們只需要通過操作這些值對象和Hibernate提供的一些基本類,就可以達到使用數據庫的目的。例如,使用Hibernate的查詢,可以直接返回包含某個值對象的列表(List),而不必向傳統的JDBC訪問方式一樣把結果集的數據逐個裝載到一個值對象中,為編碼工作節約了大量的時間。Hibernate提供的HQL是一種類SQL語言,它和EJBQL一樣都是提供對象化的數據庫查詢方式,但HQL在功能和使用方式上都非常接近于標準的SQL.

  二、 Hibernate與JDBC的區別
    Hibernate與JDBC的主要區別如下:
  1、 Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,和App Server,和EJB沒有什么必然的聯系。Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate在任何場合下取代JDBC.

  2、 Hibernate是一個和JDBC密切關聯的框架,所以Hibernate的兼容性和JDBC驅動,和數據庫都有一定的關系,但是和使用它的Java程序,和App Server沒有任何關系,也不存在兼容性問題。

  3、 Hibernate是做為JDBC的替代者出現的,不能用來直接和Entity Bean做對比。

  三、 Hibernate 進行多表關聯查詢
      Hibernate對多個表進行查詢時,查詢結果是多個表的笛卡爾積,或者稱為“交叉”連接。 例如:from Student, Book
from Student as stu, Book as boo from Student stu, Book boo
注意:讓查詢中的Student和Book均是表student和book對應的類名,它的名字一定要和類的名字相同,包括字母的大小寫。別名應該服從首字母小寫的規則是一個好習慣,這和Java對局部變量的命名規范是一致的。

  下面列舉一個完整的例子來說明Hibernate對多個表進行關聯查詢(其中粗體是我們要特別注意的地方,相應表BookInfo和BookSelection的結構和其對應的hbm.xml、class文件就不一一列舉了,相信大家一定知道如何做!)

String squery= "from BookInfo book, BookSelection sel where book.id = sel.bookId"; 
Collection result = new ArrayList(); 
Transaction tx = null; 
try { 
 Session session = HibernateUtil.currentSession(); 
 tx = session.beginTransaction(); 
 Query query = session.createQuery(squery); 
 result = query.list(); 
 tx.commit(); 
} catch (Exception e) { 
 throw e; 
} finally { 
 HibernateUtil.closeSession(); 
} 
ArrayList rstList = (ArrayList) result; 
Iterator itrtr= sList.iterator(); 
while (itrtr.hasNext()) { 
 Object[] bj = (Object[]) itrtr.next(); 
 BookInfo bookInfo = (BookInfo)obj[0]; 
 BookSelection bookSelect = (BookSelection)obj[1]; 
 System.out.println("BookInfo-Title: " + bookInfo.getTitle()); 
 System.out.println("BookSelection-BookSelectionId: " + bookSelect.getId()); 
} 
轉自:http://xp9802.iteye.com/blog/1401500

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!