一路拾遺
          Collect By Finding All The Way ......
          posts - 81,comments - 41,trackbacks - 0

             由于項目的需要,我對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對多個表進行關聯查詢(其中粗體是我們要特別注意的地方,相應表tBookInfo和BookSelection的結構和其對應的hbm.xml、class文件就不一一列舉了,有需要詳細了解的朋友,請聯系我):

          String sTest = "from tBookInfo 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(sql); 
           result 
          = query.list(); 
           tx.commit(); 
          }
           catch (Exception e) 
           
          throw e; 
          }
           finally 
           HibernateUtil.closeSession(); 
          }
           
          ArrayList sList 
          = (ArrayList) result; 
          Iterator iterator1 
          = sList.iterator(); 
          while (iterator1.hasNext()) 
           Object[] o 
          = (Object[]) iterator1.next(); 
           tBookInfo bookInfo 
          = (tBookInfo) o[0]; 
           BookSelection bookSelect 
          = (BookSelection) o[1]; 
           System.out.println(
          "BookInfo-Title: " + bookInfo.getTitle()); 
           System.out.println(
          "BookSelection-BookSelectionId: " + bookSelect.getId()); 
          }
           
          posted on 2008-07-25 21:56 胖胖泡泡 閱讀(253) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 延安市| 宕昌县| 浪卡子县| 噶尔县| 新巴尔虎左旗| 阿巴嘎旗| 曲沃县| 平遥县| 敦煌市| 大田县| 简阳市| 双峰县| 乡宁县| 株洲市| 潍坊市| 安岳县| 扶绥县| 涪陵区| 巴中市| 柯坪县| 滨州市| 永嘉县| 任丘市| 龙川县| 安徽省| 河西区| 延安市| 临沂市| 荃湾区| 张家界市| 上饶县| 永年县| 华容县| 吉木乃县| 扬州市| 资源县| 道孚县| 白沙| 大理市| 兰坪| 图木舒克市|