翻譯|使用教程|編輯:陳津勇|2019-11-05 14:07:18.773|閱讀 227 次
概述:開源JORM使用簡(jiǎn)單,且提供多種功能。通過本文,您將學(xué)到:配置Hibernate項(xiàng)目、逆向工程數(shù)據(jù)庫(kù)表、使用兩個(gè)編輯器。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
1、什么是Hibernate?
Hibernate是一種非常流行的、基于Java的開源對(duì)象關(guān)系映射(JORM)引擎,易于啟動(dòng)和運(yùn)行,提供了豐富的功能,包括:
多種映射策略
傳遞持久性
單對(duì)象到多表的映射
集合支持
多態(tài)關(guān)聯(lián)
可自定義的SQL查詢
Hibernate用于在運(yùn)行時(shí)將數(shù)據(jù)庫(kù)結(jié)構(gòu)映射到Java對(duì)象。使用像Hibernate這樣的持久性框架,開發(fā)人員可以專注于編寫業(yè)務(wù)邏輯,而不是編寫準(zhǔn)確、高效的持久性層(包括DAO、SQL查詢、JDBC代碼、連接管理等)。
任何需要在Java應(yīng)用程序?qū)ο蠛蛿?shù)據(jù)庫(kù)表之間移動(dòng)數(shù)據(jù)的Java應(yīng)用程序都可以使用Hibernate。因此,它在開發(fā)兩層和三層Java EE應(yīng)用程序中非常有用。將Hibernate集成到您的應(yīng)用程序中涉及:
將Hibernate核心和支持JAR庫(kù)安裝到項(xiàng)目中
創(chuàng)建一個(gè)hibernate.cfg.xml文件來描述如何訪問數(shù)據(jù)庫(kù)
為每個(gè)可持久的Java類創(chuàng)建單獨(dú)的映射描述符文件
1.1導(dǎo)致Hibernate的歷史
在Java數(shù)據(jù)庫(kù)和Web編程的早期,開發(fā)人員使用java.sql包提供的不同類訪問其數(shù)據(jù)庫(kù),這包括從DriverManager獲取驅(qū)動(dòng)程序、創(chuàng)建和使用連接、正確處理異常、關(guān)閉連接等。在此階段,一個(gè)常見的問題是忘記清理數(shù)據(jù)庫(kù)連接,并在它們運(yùn)行了一段時(shí)間后在應(yīng)用程序中得到連接異常的反饋。
幾年后,連接池成為一個(gè)大話題,因?yàn)樗鼈冏岄_發(fā)人員不用再擔(dān)心創(chuàng)建和管理(清理)數(shù)據(jù)庫(kù)連接,而是把精力集中在他們的SQL和ResultSet解析代碼上。突然之間,長(zhǎng)時(shí)間運(yùn)行的應(yīng)用程序中數(shù)據(jù)庫(kù)連接異常的問題基本解決了。但是,仍然經(jīng)??吹綌?shù)百行樣板代碼用于用值填充查詢并解析SQL查詢返回的ResultSet。
又過了幾年,有人想到了將ResultSet結(jié)果直接自動(dòng)映射到Java對(duì)象的方法,這在很大程度上解決了所有冗余樣板解析代碼的問題。那時(shí),Java數(shù)據(jù)庫(kù)開發(fā)已經(jīng)邁出了幾大步,并且變得越來越簡(jiǎn)單。然后,Hibernate模式為人熟知。
隨著Hibernate的出現(xiàn),不僅這些東西會(huì)繼續(xù)自動(dòng)化,Hibernate也會(huì)管理內(nèi)存中對(duì)象的狀態(tài),它會(huì)擔(dān)心何時(shí)以及如何從數(shù)據(jù)庫(kù)讀取或?qū)懭雽?duì)象值?,F(xiàn)在,開發(fā)人員只處理對(duì)象(或映射對(duì)象),Hibernate則處理其他所有內(nèi)容。開發(fā)人員不再編寫JDBC和SQL代碼。相反,他們使用的是為他們工作的代碼。
當(dāng)Hibernate出現(xiàn)時(shí),另一種可用的持久性技術(shù)是EJB2.x。Hibernate的時(shí)間安排、易用性和強(qiáng)大功能都是Java領(lǐng)域在相當(dāng)長(zhǎng)一段時(shí)間內(nèi)所采用的最快技術(shù)之一。
2、Hibernate項(xiàng)目配置
您可以通過創(chuàng)建任何受支持類型的基礎(chǔ)項(xiàng)目(例如Java或Web項(xiàng)目)添加Hibernate facet,來創(chuàng)建啟用了hibernate的項(xiàng)目。MyEclipse為您創(chuàng)建一個(gè)hibernate.cfg.xml文件,您必須指定數(shù)據(jù)庫(kù)連接詳細(xì)信息。
您也可以通過打開項(xiàng)目的Project Facets屬性,將多個(gè)構(gòu)面同時(shí)添加到項(xiàng)目中。
2.1Hibernate映射和配置
Hibernate用Java編寫,可以通過兩種類型的配置文件進(jìn)行高度配置。第一種配置文件名為hibernate.cfg.xml。啟動(dòng)時(shí),Hibernate會(huì)查詢此XML文件的操作屬性,例如數(shù)據(jù)庫(kù)連接字符串和密碼、數(shù)據(jù)庫(kù)方言以及映射文件的位置。Hibernate在類路徑上搜索此文件。
第二種類型的配置文件是映射描述(文件擴(kuò)展名* .hbm),它指示Hibernate如何在特定的Java類和一個(gè)或多個(gè)數(shù)據(jù)庫(kù)表之間映射數(shù)據(jù)。MyEclipse提供了用于處理所有這些配置文件類型的工具,并在您更改數(shù)據(jù)庫(kù)和Hibernate映射的Java類時(shí)使它們保持同步。編輯器具有以下功能:
基于表單的高級(jí)編輯器和隨附的向?qū)?/p>
超鏈接導(dǎo)航到引用的類和屬性
類名自動(dòng)完成
屬性名稱自動(dòng)完成
內(nèi)容有助于映射文件元素、屬性和值。
3、逆向工程數(shù)據(jù)庫(kù)表
您可以將數(shù)據(jù)庫(kù)表信息反向工程為Hibernate(Java)對(duì)象,然后將它們添加到項(xiàng)目中。為了最大程度地控制生成的Hibernate對(duì)象,可以在向?qū)е羞x擇詳細(xì)信息,例如主鍵生成策略、對(duì)象名稱、類型等。
在Database Explorer透視圖中,可以查看所連接的數(shù)據(jù)庫(kù)的內(nèi)容。在DB瀏覽器中,右鍵單擊要反向工程的表,然后從菜單中選擇Hibernate Reverse Engineering。完成向?qū)Ш螅到y(tǒng)將提示您切換到Hibernate透視圖。
這些類將生成到在向?qū)е羞x擇的Java包中。
對(duì)數(shù)據(jù)庫(kù)表進(jìn)行反向工程時(shí),實(shí)體將顯示在配置文件的Mappings部分中。
4. HQL Editor
HQL Editor以及Hibernate透視圖中的其他HQL視圖可幫助開發(fā)、評(píng)估或測(cè)試HQL查詢。HQL是一種類似于SQL的語(yǔ)言,稱為Hibernate查詢語(yǔ)言。它有時(shí)看起來像是簡(jiǎn)化的SQL,使用對(duì)象名和引用而不是表名和列名。該編輯器具有以下功能:
內(nèi)容輔助
輸入時(shí),Hibernate動(dòng)態(tài)查詢轉(zhuǎn)換器視圖將HQL查詢轉(zhuǎn)換為SQL。
Hibernate Query Results視圖可以包含多個(gè)結(jié)果集。結(jié)果屬性顯示在Properties視圖中。
查詢參數(shù)視圖可輕松執(zhí)行變量查詢
項(xiàng)目選擇器,可以在不同的Hibernate項(xiàng)目之間切換上下文。
使用HQL Editor,可以即時(shí)編寫并運(yùn)行HQL。編輯器利用MyEclipse從數(shù)據(jù)庫(kù)進(jìn)行反向工程的對(duì)象,將查詢轉(zhuǎn)換為SQL(如右下所示),然后運(yùn)行它。結(jié)果在Java對(duì)象中返回,并顯示在左下角。
對(duì)數(shù)據(jù)庫(kù)進(jìn)行反向工程之后,就可以開始編寫應(yīng)用程序以讀取、寫入和更新數(shù)據(jù)庫(kù)中的對(duì)象。放置好Java類和方法后,可以在HQL Editor中運(yùn)行Hibernate查詢來查詢數(shù)據(jù)庫(kù),這是查詢數(shù)據(jù)庫(kù)的另一種方法。您還可以切換到Database Explorer透視圖并從那里查詢數(shù)據(jù)庫(kù)以查看相同的結(jié)果。
5、Criteria Editor
除了HQL編輯器之外,MyEclipse Hibernate工具還包括一個(gè)Criteria編輯器。Hibernate中的Criteria是一種利用對(duì)象實(shí)例結(jié)合查詢約束來針對(duì)實(shí)體創(chuàng)建查詢的方法。例如,假設(shè)創(chuàng)建一個(gè)類型為User的實(shí)體實(shí)例,將實(shí)體指定為查詢的條件,并告訴條件只返回前10個(gè)結(jié)果,這是創(chuàng)建用于實(shí)體的復(fù)雜查詢的有效且快速的方法。
要訪問Criteria Editor,請(qǐng)右鍵單擊包含Hibernate facet的項(xiàng)目,然后選擇MyEclipse > Open Criteria Editor。
打開Criteria Editor后,可以在編輯器中輸入任何表示條件的有效Java代碼,并使用編輯器頂部的“Run”圖標(biāo)執(zhí)行它們。
下面的示例顯示了一個(gè)基于EchoMessage實(shí)體的簡(jiǎn)單條件,要求Hibernate返回其EchoMessageId值為2的實(shí)體。結(jié)果出現(xiàn)在Result視圖中。
可以使用MyEclipse中的Criteria Editor來編寫和執(zhí)行任何有效的基于條件的代碼。在Java編輯器中輸入條件時(shí),選擇它并調(diào)用快速修復(fù)將顯示“Copy to Criteria”編輯器操作。選擇此操作將打開“Criteria”編輯器,并使用所選文本進(jìn)行初始化。
您可以在Criteria Editor中測(cè)試和編輯條件。完成后,關(guān)閉編輯器可用修改后的條件查詢替換最開始選擇的文本。
6、常見問題
Q:Hibernate與EJB 3/JPA相比如何?
A:Hibernate 3.2實(shí)際上是與JPA兼容的,它實(shí)現(xiàn)了所有新的注釋,這些注釋讓JPA使用起來非常自動(dòng)化且更簡(jiǎn)單。因此,除了使用JPA的commercial implementation外,還可以使用Hibernate,所有標(biāo)準(zhǔn)JPA批注仍將保留在類中,而無需進(jìn)行任何更改。
Q:Hibernate可以擴(kuò)展到非常大的應(yīng)用程序嗎?
A:可以。實(shí)際上,Hibernate的根源來自于兩位創(chuàng)始人在大型企業(yè)應(yīng)用程序中擔(dān)任顧問的經(jīng)驗(yàn),Hibernate是他們對(duì)持久性在應(yīng)用程序中應(yīng)如何起作用的看法。
幾年前,Gavin King向社區(qū)提出了一項(xiàng)挑戰(zhàn),要求找到手工調(diào)整的JDBC SQL。該SQL執(zhí)行的幅度要比Hibernate生成的SQL快,由此也能看出該框架非常注重功能、靈活性和性能。
想進(jìn)一步了解MyEclips?知你所需,解你所惑!
想與更多人聊MyEclips?加入MyEclipse中國(guó)(官方2):742336981暢所欲言吧!
想及時(shí)獲取MyEclips資訊?掃描下方二維碼,MyEclips信息跟你走!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: