翻譯|使用教程|編輯:陳津勇|2019-11-04 11:47:09.967|閱讀 722 次
概述:本教程介紹了Hibernate開發的基本技術。通過本文,您將創建一個可使用Hibernate將文本消息持久保存到單個數據庫表的簡單應用程序。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在開始本教程之前,請先下載并熟悉MyEclipse數據庫工具。
在本教程中,將介紹如何:
在Java項目中啟用Hibernate支持
創建一個Hibernate配置文件
使用自定義Session Factory
使用HQL編輯器生成Java類和數據庫映射文件
1、創建一個示例數據庫表
在開始本教程之前,必須設置受支持的數據庫服務器,例如嵌入式Derby數據庫或外部安裝的數據庫。對于本教程,則使用在MyEclipse中連接到數據庫中創建的Oracle數據庫連接配置文件。
首先,請使用以下SQL命令創建您將映射到Java類的數據庫表。為方便測試,該表包括幾個記錄。
echo_message DDL
創建表echo_message
(
id整數PRIMARY KEY不為null,
msg VARCHAR(255)
);
插入echo_message值(1,'hello world');
插入echo_message值(2,'goodbye world');
注意:即使本教程使用Oracle,上面的說明和示例表也足夠通用,可以用于任何數據庫。
2、創建一個啟用了Hibernate的Java項目
選擇 File>New>Project>Java Project。
在“HibernateDemo”字段中鍵入HibernateDemo,然后單擊“完成”。
右鍵單擊HibernateDemo,然后選擇MyEclipse> Project Facets> Install Hibernate Facet。
從目標運行時下拉列表中選擇MyEclipse通用Java Runtime,然后單擊下一步。MyEclipse 為您創建一個新的hibernate.cfg.xml文件。
注:啟用Hibernate注釋支持僅適用于Hibernate 3.2和3.3,Hibernate 4.x自動包含注釋支持。注釋支持在SessionFactory類中創建AnnotationConfiguration而不是常規Configuration。如果您要使用帶注釋的POJO而不是Hibernate映射文件,這一點很有必要。
單擊“Java Package”字段旁邊的“新建”以為session factory類創建新的軟件包。鍵入com.myeclipse.hibernate作為程序包名稱,然后單擊“完成”。
單擊“Next”,然后保留“ Specify數據庫連接詳細信息”復選框。
從DB Driver下拉列表中,選擇在MyEclipse中連接數據庫時創建的Oracle配置文件。這一操作將自動填充其余字段。
您可以通過單擊Next添加庫,或單擊Finish接受默認的庫。
注意:在這個階段不需要配置文件。您無需選擇概要文件,采用手動填充此頁面上顯示的其余詳細信息。但有一點必須注意,一定要在向導完成后將JDBC驅動程序JAR文件復制到項目中。
現在,可以跳過上面執行的數據源配置,稍后使用Hibernate Configuration編輯器進行。
注意:稍后還可以通過選擇File > New >Other,展開MyEclipse > Hibernate并選擇Hibernate Session Factory來創建Session Factory。如果您選擇將庫復制到項目中,那么在完成過程中,向導在復制庫和更新各種項目資源時最多可能會出現30秒鐘的非活動狀態。這時,需耐心等待所有操作完成,然后再采取其他措施。
完成向導將執行以下操作:
如果選擇將Hibernate庫(JAR)復制到項目中,則將其安裝到項目中
更新項目的構建路徑以包括已安裝的Hibernate庫
為項目創建和配置hibernate.cfg.xml文件
為您的項目創建一個自定義SessionFactory類(例如HibernateSessionFactory),以簡化Hibernate會話處理。
下圖突出顯示了新創建的HibernateSessionFactory.java文件的重要功能。此類管理單個Hibernate Session對象,該對象由該getSession()方法延遲初始化,并由該方法刷新和釋放closeSession()。在運行時,Hibernate會話創建過程必須能夠在類路徑上找到hibernate.cfg.xml文件。
CONFIG_FILE_LOCATION變量定義了hibernate.cfg.xml文件相對于軟件包的路徑,默認值由Hibernate支持向導提供。如果您重新定位 hibernate.cfg.xml文件,則必須手動修改CONFIG_FILE_LOCATION值來引用新位置,或者在使用前使用該setConfigFile()方法進行設置。
3、自定義Hibernate配置文件
完成添加Hibernate功能的向導后,hibernate配置文件將自動打開。如果在添加功能時跳過了數據源配置,那么現在需要使用以下步驟進行操作。如果您已經配置了數據源,請繼續添加屬性。
選擇“Use JDBC Driver”選項,指定在數據庫資源管理器中定義的JDBC驅動程序。如果尚未配置JDBC驅動程序,請閱讀MyEclipse教程“連接到數據庫”,并繼續之前進行的配置。
在“Connection Profile”下拉列表中選擇配置文件。如果配置了JDBC驅動程序但未配置連接配置文件,則可以單擊“New profile”來創建一個新的連接配置文件。如果已經有一個連接配置文件,從下拉列表中選擇它時,接下來的四個字段將自動填寫。
單擊 Copy JDBC Driver并添加到類路徑鏈接。
從“Dialect”下拉列表中,為數據庫選擇適當的Hibernate方言。
Configuration頁現在應該像這樣:
您可以使用“Properties”選項來添加和編輯屬性。
映射部分允許您添加項目中可能已經存在的映射文件,同時還支持從資源管理器中拖放映射文件。
下圖顯示的是完成上述步驟后的Hibernate配置文件源。
4、使用逆向工程進行Java表映射
由于大多數公司的Web項目都涉及到與關系數據庫中現有的公司數據進行交互,所以本節重點介紹正向工程Java數據對象和來自現有數據庫的映射描述符。
選擇Window > Open Perspective > Other,然后選擇MyEclipse Hibernate。
使用您在Hibernate配置中使用的配置文件打開數據庫連接。
瀏覽數據庫架構,直到找到要為其創建Hibernate映射的表/實體。
右鍵單擊該表,然后選擇“Hibernate Reverse Engineering”。或者從數據庫瀏覽器中拖動表,并將它們放到Hibernate Configuration編輯器中以啟動向導。
注意:您可以在數據庫瀏覽器中選擇多個表,以便同時對它們進行反向工程。
單擊Java src文件夾字段旁邊的瀏覽,查看可用的Hibernate項目和可在其中生成文件的源文件夾。在HibernateDemo項目中選擇src文件夾。
單擊Java軟件包字段旁邊的瀏覽,然后選擇com.myeclipse.hibernate軟件包。
如下所示完成向導的其余部分,然后單擊“下一步”。
注意:向導的第2頁和第3頁的設置用于自定義逆向工程過程。無需自定義任何設置,通過單擊Finish now就可以啟動該過程。
位置 | 描述 |
Java src文件夾 | 生成映射文件、pojo和DAOs的項目和源文件夾。 |
Java包 | 生成映射文件、POJO和DAO的包。 |
創建POJO <> DB表映射信息 | 從所選表中生成映射文件或帶注釋的POJO。 |
更新hibernate配置 | 將生成的映射文件/帶注釋的POJO添加到Hibernate配置文件中。 |
Java數據對象 | 生成與映射文件和表相對應的數據對象(POJO)。 |
創建抽象類 | 為每個數據對象生成一個抽象超類。在后續的生成過程中,抽象類將被覆蓋,但是相應的子類不會被覆蓋。 |
基本持久性類 | 如果需要,生成的pojo應該擴展類的完全限定名。 |
Java數據訪問對象 | 生成數據訪問對象,以便訪問Basic、Spring或JNDI DAOs映射的類和表。 |
生成精確的findBy方法 | 為映射類中的每個屬性生成findBy方法。 例如findByFirstName(“ name”) ; |
使用自定義模板 | 用您自己的版本覆蓋MyEclipse內部速度模板。更多詳細信息,請查看下方“使用Templates對生成的代碼進行微調”部分內容。 |
模板目錄 | 包含定制模板樹的根目錄。 |
接受默認設置,然后單擊“下一步”。
位置 | 描述 |
Rev-eng設置文件 | 該文件包含逆向工程配置和標簽,并保留它們以備將來使用。單擊Setup 按鈕指定現有文件或創建一個新文件。在找不到該向導的情況下,向導將自動創建此文件。 |
定制修訂策略 | 允許指定自定義逆向工程策略類,此類允許您以編程方式自定義逆向工程過程的各個方面。更多詳細信息,請查看下方“使用自定義逆向工程策略”部分內容。 |
類型映射 | 確定在字段映射的type屬性中使用Java還是Hibernate類型,例如java.lang.String vs. string。(僅在此向導第3頁的“Customized Type Mappings”列表中找不到更特定的設置時,才使用此設置。) |
ID Generator | ID Generator是Hibernate映射文件中的必填字段,它定義了用于為持久類的實例生成唯一標識符的Java類。 如果未在該向導的第3頁上進行空白或更具體的設置,Hibernate映射引擎會為您選擇一個ID生成器。 |
生成基本類型的組合ID |
|
生成版本和時間戳標簽 | 如果啟用,則在生成的映射文件中,名為“version”和“timestamp”的列將表示為 |
啟用多對多檢測 | 確保在為進行逆向工程而選擇的表之間存在多對多關系時,將檢測到這些關系并生成相應的代碼。 |
啟用多對一檢測 | 確保在為進行逆向工程而選擇的表之間存在多對一關系時,將檢測到這些關系并生成相應的代碼。 |
定制類型映射 | 允許您使用“長度”、“比例”、“精度”和“可空性”作為JDBC類型的限定條件來指定從JDBC類型到Hibernate類型的自定義映射。 |
單擊兩個“Include Referenced Tables”復選框,使向導在反向工程過程中包括引用表。單擊完成。
注意:選擇表或列可以專門針對表或列定制逆向工程。
位置 | 描述 |
類名 | 與此表對應的數據對象類的完全限定名。 |
ID Generator | 要用于此表的ID Generator。 |
JDBC類型 | 此列的JDBC類型覆蓋。 |
屬性名 | 與此列對應的生成屬性的名稱。 |
Hibernate類型 | 與此列對應的Hibernate類型 |
包括參考/參考表 | 將要反向工程的表集擴展為該表引用的其他表以及分別引用該表的表。 |
生成對ListedTable(fk)-> UnlistedTable和UnlistedTable(fk)-> ListedTable的支持 | 生成此表與其他表的關系相對應的代碼(這些表沒有進行反向工程,并且不在此頁面的表列表中)。 |
逆向工程執行以下操作:
創建Abstract <tablename>類。這個抽象類提供了必需的Hibernate兼容性功能,例如用于與數據庫表中的列相對應的持久屬性的公共getter和setter方法。
創建<tablename> Java類,它是Abstract <tablename>類的具體子類。所述<表名> 類旨直接使用附加的業務和驗證邏輯進行修改,并且在后續的生成過程中不會被覆蓋。
創建.hbm.xml Hibernate映射描述符。這個文件指導Hibernate如何<tablename> Java類和數據庫表之間映射數據。
在hibernate.cfg.xml文件中注冊<tablename> .hbm.xml映射描述符。
創建<tablename> DAO Java類。該類提供對<tablename>數據對象類的便捷性訪問。
創建IBaseHibernateDAO接口和BaseHibernateDAO類。這些類對于基本DAO的功能是必需的,它們使用添加Hibernate功能時生成的Session工廠(com.myeclipse.hibernate.HibernateSessionFactory)來獲取Hibernate會話。
下圖突出顯示了所生成的類、關鍵方法和映射文件,以及對hibernate.cfg.xml文件中添加的映射文件的引用。
4.1使用Templates對生成的代碼進行微調
將模板文件下載并解壓到、文件系統。
按照zip文件中README.txt的說明自定義模板。
調用逆向工程向導。在向導的第一頁上,選擇“Use Custom Templates”選項,然后在“Template Directory”字段中,指定包含您下載的模板的文件夾。
4.2使用Custom Reverse Engineering Strategy
右鍵單擊項目,選擇Properties,并選擇Java構建路徑。
單擊Libraries標簽,然后單擊Add Library。
選擇MyEclipse Library,單擊Next,并選擇MyEclipse Persistence Tools。單擊Finish。
在項目中創建一個新類,來擴展org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy類。
定義單個參數構造函數,例如columnToPropertyName。以下是一個示例MyStrategy.java文件,該文件將ME_前綴添加到所有生成的屬性中。
package com.myeclipse.hibernate; import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy; import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; import org.hibernate.cfg.reveng.TableIdentifier; public class MyStrategy extends DelegatingReverseEngineeringStrategy { public MyStrategy(ReverseEngineeringStrategy strategy){ super(strategy); } public String columnToPropertyName(TableIdentifier table, String columnName) { return "ME_" + super.columnToPropertyName(table, columnName); } }
在“Reverse Engineering”向導的第二頁上,指定剛創建的類。
*有關本教程更多信息,請點擊此處瀏覽>>>
想進一步了解MyEclips?知你所需,解你所惑!
想與更多人聊MyEclips?加入MyEclipse中國(官方2):742336981暢所欲言吧!
想及時獲取MyEclips資訊?掃描下方二維碼,MyEclips信息跟你走!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: