国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java應(yīng)用中Hibernate對多表關(guān)聯(lián)查詢的總結(jié)

2019-11-17 04:34:51
字體:
供稿:網(wǎng)友
由于公司項目的需要,我對Hibernate對多表關(guān)聯(lián)查詢研究了一下,現(xiàn)總結(jié)如下,供朋友參考。

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

二、 Hibernate與JDBC的區(qū)別Hibernate與JDBC的主要區(qū)別如下:

1、 Hibernate是JDBC的輕量級的對象封裝,它是一個獨(dú)立的對象持久層框架,和App Server,和EJB沒有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate在任何場合下取代JDBC.

2、 Hibernate是一個和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動,和數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的java程序,和App Server沒有任何關(guān)系,也不存在兼容性問題。

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

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

下面列舉一個完整的例子來說明Hibernate對多個表進(jìn)行關(guān)聯(lián)查詢(其中粗體是我們要特別注意的地方,相應(yīng)表tBookInfo和BookSelection的結(jié)構(gòu)和其對應(yīng)的hbm.xml、class文件就不一一列舉了,有需要詳細(xì)了解的朋友,請聯(lián)系我):

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());

}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 铜陵市| 丹阳市| 铜川市| 施秉县| 吴川市| 安达市| 洞头县| 马尔康县| 阳城县| 嘉荫县| 巩义市| 永康市| 濉溪县| 怀集县| 合肥市| 叙永县| 望奎县| 利川市| 武强县| 清丰县| 东平县| 云阳县| 开鲁县| 日照市| 安陆市| 白河县| 介休市| 景洪市| 平湖市| 手游| 青海省| 尖扎县| 荔浦县| 长兴县| 融水| 上蔡县| 清远市| 隆德县| 饶阳县| 轮台县| 清涧县|