淺析Hibernate中的多表查詢
Hibernate中有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate多表查詢功能,看完本文你肯定有不少收獲,希望本文能讓你更多的了解Hibernate多表查詢。
由于公司項(xiàng)目的需要,我對(duì)Hibernate多表查詢多表關(guān)聯(lián)查詢研究了一下,現(xiàn)總結(jié)如下,供朋友參考。 網(wǎng)管聯(lián)盟www.bitsCN.com
一、 Hibernate簡(jiǎn)介Hibernate是一個(gè)JDO工具。它的工作原理是通過(guò)文件(一般有兩種:xml文件和properties文件)把值對(duì)象和數(shù)據(jù)庫(kù)表之間建立起一個(gè)映射關(guān)系。這樣,我們只需要通過(guò)操作這些值對(duì)象和Hibernate提供的一些基本類,就可以達(dá)到使用數(shù)據(jù)庫(kù)的目的。例如,使用Hibernate的查詢,可以直接返回包含某個(gè)值對(duì)象的列表(List),而不必向傳統(tǒng)的JDBC訪問(wèn)方式一樣把結(jié)果集的數(shù)據(jù)逐個(gè)裝載到一個(gè)值對(duì)象中,為編碼工作節(jié)約了大量的時(shí)間。Hibernate提供的HQL是一種類SQL語(yǔ)言,它和EJBQL一樣都是提供對(duì)象化的數(shù)據(jù)庫(kù)查詢方式,但HQL在功能和使用方式上都非常接近于標(biāo)準(zhǔn)的SQL. 中國(guó)網(wǎng)管聯(lián)盟www_bitscn_com
二、 Hibernate與JDBC的區(qū)別Hibernate與JDBC的主要區(qū)別如下:
◆ Hibernate是JDBC的輕量級(jí)的對(duì)象封裝,它是一個(gè)獨(dú)立的對(duì)象持久層框架,和App Server,和EJB沒(méi)有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場(chǎng)合,從某種意義上來(lái)說(shuō),Hibernate在任何場(chǎng)合下取代JDBC.
◆ Hibernate是一個(gè)和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動(dòng),和數(shù)據(jù)庫(kù)都有一定的關(guān)系,但是和使用它的Java程序,和App Server沒(méi)有任何關(guān)系,也不存在兼容性問(wèn)題。 中國(guó)網(wǎng)管論壇bbs.bitsCN.com
◆Hibernate是做為JDBC的替代者出現(xiàn)的,不能用來(lái)直接和Entity Bean做對(duì)比。
三、 Hibernate 進(jìn)行多表關(guān)聯(lián)查詢Hibernate對(duì)多個(gè)表進(jìn)行查詢時(shí),查詢結(jié)果是多個(gè)表的笛卡爾積,或者稱為“交叉”連接。 例如:from Student, Book from Student as stu, Book as boo from Student stu, Book boo注意:讓查詢中的Student和Book均是表student和book對(duì)應(yīng)的類名,它的名字一定要和類的名字相同,包括字母的大小寫。別名應(yīng)該服從首字母小寫的規(guī)則是一個(gè)好習(xí)慣,這和Java對(duì)局部變量的命名規(guī)范是一致的。 網(wǎng)管聯(lián)盟www.bitsCN.com
下面列舉一個(gè)完整的例子來(lái)說(shuō)明Hibernate多表查詢(其中粗體是我們要特別注意的地方,相應(yīng)表tBookInfo和BookSelection的結(jié)構(gòu)和其對(duì)應(yīng)的hbm.xml、class文件就不一一列舉了,有需要詳細(xì)了解的朋友,請(qǐng)聯(lián)系我):博客:http://blog.sina.com.cn/u/1237288325
- 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());
- }
【編輯推薦】