MyEclipse數(shù)據(jù)庫教程:使用Hibernate開發(fā)Persistence(一)
在開始本教程之前,請先下載并熟悉MyEclipse數(shù)據(jù)庫工具。
在本教程中,將介紹如何:
在Java項目中啟用Hibernate支持
創(chuàng)建一個Hibernate配置文件
使用自定義Session Factory
使用HQL編輯器生成Java類和數(shù)據(jù)庫映射文件
1、創(chuàng)建一個示例數(shù)據(jù)庫表
在開始本教程之前,必須設(shè)置受支持的數(shù)據(jù)庫服務(wù)器,例如嵌入式Derby數(shù)據(jù)庫或外部安裝的數(shù)據(jù)庫。對于本教程,則使用在MyEclipse中連接到數(shù)據(jù)庫中創(chuàng)建的Oracle數(shù)據(jù)庫連接配置文件。
首先,請使用以下SQL命令創(chuàng)建您將映射到Java類的數(shù)據(jù)庫表。為方便測試,該表包括幾個記錄。
echo_message DDL
創(chuàng)建表echo_message
(
id整數(shù)PRIMARY KEY不為null,
msg VARCHAR(255)
);
插入echo_message值(1,'hello world');
插入echo_message值(2,'goodbye world');
注意:即使本教程使用Oracle,上面的說明和示例表也足夠通用,可以用于任何數(shù)據(jù)庫。
2、創(chuàng)建一個啟用了Hibernate的Java項目
選擇 File>New>Project>Java Project。
在“HibernateDemo”字段中鍵入HibernateDemo,然后單擊“完成”。
右鍵單擊HibernateDemo,然后選擇MyEclipse> Project Facets> Install Hibernate Facet。
從目標運行時下拉列表中選擇MyEclipse通用Java Runtime,然后單擊下一步。MyEclipse 為您創(chuàng)建一個新的hibernate.cfg.xml文件。
注:啟用Hibernate注釋支持僅適用于Hibernate 3.2和3.3,Hibernate 4.x自動包含注釋支持。注釋支持在SessionFactory類中創(chuàng)建AnnotationConfiguration而不是常規(guī)Configuration。如果您要使用帶注釋的POJO而不是Hibernate映射文件,這一點很有必要。
單擊“Java Package”字段旁邊的“新建”以為session factory類創(chuàng)建新的軟件包。鍵入com.myeclipse.hibernate作為程序包名稱,然后單擊“完成”。
單擊“Next”,然后保留“ Specify數(shù)據(jù)庫連接詳細信息”復(fù)選框。
從DB Driver下拉列表中,選擇在MyEclipse中連接數(shù)據(jù)庫時創(chuàng)建的Oracle配置文件。這一操作將自動填充其余字段。
您可以通過單擊Next添加庫,或單擊Finish接受默認的庫。
注意:在這個階段不需要配置文件。您無需選擇概要文件,采用手動填充此頁面上顯示的其余詳細信息。但有一點必須注意,一定要在向?qū)瓿珊髮DBC驅(qū)動程序JAR文件復(fù)制到項目中。
現(xiàn)在,可以跳過上面執(zhí)行的數(shù)據(jù)源配置,稍后使用Hibernate Configuration編輯器進行。
注意:稍后還可以通過選擇File > New >Other,展開MyEclipse > Hibernate并選擇Hibernate Session Factory來創(chuàng)建Session Factory。如果您選擇將庫復(fù)制到項目中,那么在完成過程中,向?qū)г趶?fù)制庫和更新各種項目資源時最多可能會出現(xiàn)30秒鐘的非活動狀態(tài)。這時,需耐心等待所有操作完成,然后再采取其他措施。
完成向?qū)?zhí)行以下操作:
如果選擇將Hibernate庫(JAR)復(fù)制到項目中,則將其安裝到項目中
更新項目的構(gòu)建路徑以包括已安裝的Hibernate庫
為項目創(chuàng)建和配置hibernate.cfg.xml文件
為您的項目創(chuàng)建一個自定義SessionFactory類(例如HibernateSessionFactory),以簡化Hibernate會話處理。
下圖突出顯示了新創(chuàng)建的HibernateSessionFactory.java文件的重要功能。此類管理單個Hibernate Session對象,該對象由該getSession()方法延遲初始化,并由該方法刷新和釋放closeSession()。在運行時,Hibernate會話創(chuàng)建過程必須能夠在類路徑上找到hibernate.cfg.xml文件。
CONFIG_FILE_LOCATION變量定義了hibernate.cfg.xml文件相對于軟件包的路徑,默認值由Hibernate支持向?qū)峁?。如果您重新定?nbsp; hibernate.cfg.xml文件,則必須手動修改CONFIG_FILE_LOCATION值來引用新位置,或者在使用前使用該setConfigFile()方法進行設(shè)置。
3、自定義Hibernate配置文件
完成添加Hibernate功能的向?qū)Ш?,hibernate配置文件將自動打開。如果在添加功能時跳過了數(shù)據(jù)源配置,那么現(xiàn)在需要使用以下步驟進行操作。如果您已經(jīng)配置了數(shù)據(jù)源,請繼續(xù)添加屬性。
選擇“Use JDBC Driver”選項,指定在數(shù)據(jù)庫資源管理器中定義的JDBC驅(qū)動程序。如果尚未配置JDBC驅(qū)動程序,請閱讀MyEclipse教程“連接到數(shù)據(jù)庫”,并繼續(xù)之前進行的配置。
在“Connection Profile”下拉列表中選擇配置文件。如果配置了JDBC驅(qū)動程序但未配置連接配置文件,則可以單擊“New profile”來創(chuàng)建一個新的連接配置文件。如果已經(jīng)有一個連接配置文件,從下拉列表中選擇它時,接下來的四個字段將自動填寫。
單擊 Copy JDBC Driver并添加到類路徑鏈接。
從“Dialect”下拉列表中,為數(shù)據(jù)庫選擇適當?shù)腍ibernate方言。
Configuration頁現(xiàn)在應(yīng)該像這樣:
您可以使用“Properties”選項來添加和編輯屬性。
映射部分允許您添加項目中可能已經(jīng)存在的映射文件,同時還支持從資源管理器中拖放映射文件。
下圖顯示的是完成上述步驟后的Hibernate配置文件源。
4、使用逆向工程進行Java表映射
由于大多數(shù)公司的Web項目都涉及到與關(guān)系數(shù)據(jù)庫中現(xiàn)有的公司數(shù)據(jù)進行交互,所以本節(jié)重點介紹正向工程Java數(shù)據(jù)對象和來自現(xiàn)有數(shù)據(jù)庫的映射描述符。
選擇Window > Open Perspective > Other,然后選擇MyEclipse Hibernate。
使用您在Hibernate配置中使用的配置文件打開數(shù)據(jù)庫連接。
瀏覽數(shù)據(jù)庫架構(gòu),直到找到要為其創(chuàng)建Hibernate映射的表/實體。
右鍵單擊該表,然后選擇“Hibernate Reverse Engineering”?;蛘邚臄?shù)據(jù)庫瀏覽器中拖動表,并將它們放到Hibernate Configuration編輯器中以啟動向?qū)А?/p>
注意:您可以在數(shù)據(jù)庫瀏覽器中選擇多個表,以便同時對它們進行反向工程。
單擊Java src文件夾字段旁邊的瀏覽,查看可用的Hibernate項目和可在其中生成文件的源文件夾。在HibernateDemo項目中選擇src文件夾。
單擊Java軟件包字段旁邊的瀏覽,然后選擇com.myeclipse.hibernate軟件包。
如下所示完成向?qū)У钠溆嗖糠?,然后單擊“下一步”?/p>
注意:向?qū)У牡?頁和第3頁的設(shè)置用于自定義逆向工程過程。無需自定義任何設(shè)置,通過單擊Finish now就可以啟動該過程。
位置 | 描述 |
Java src文件夾 | 生成映射文件、pojo和DAOs的項目和源文件夾。 |
Java包 | 生成映射文件、POJO和DAO的包。 |
創(chuàng)建POJO <> DB表映射信息 | 從所選表中生成映射文件或帶注釋的POJO。 |
更新hibernate配置 | 將生成的映射文件/帶注釋的POJO添加到Hibernate配置文件中。 |
Java數(shù)據(jù)對象 | 生成與映射文件和表相對應(yīng)的數(shù)據(jù)對象(POJO)。 |
創(chuàng)建抽象類 | 為每個數(shù)據(jù)對象生成一個抽象超類。在后續(xù)的生成過程中,抽象類將被覆蓋,但是相應(yīng)的子類不會被覆蓋。 |
基本持久性類 | 如果需要,生成的pojo應(yīng)該擴展類的完全限定名。 |
Java數(shù)據(jù)訪問對象 | 生成數(shù)據(jù)訪問對象,以便訪問Basic、Spring或JNDI DAOs映射的類和表。 |
生成精確的findBy方法 | 為映射類中的每個屬性生成findBy方法。 例如findByFirstName(“ name”) ; |
使用自定義模板 | 用您自己的版本覆蓋MyEclipse內(nèi)部速度模板。更多詳細信息,請查看下方“使用Templates對生成的代碼進行微調(diào)”部分內(nèi)容。 |
模板目錄 | 包含定制模板樹的根目錄。 |
接受默認設(shè)置,然后單擊“下一步”。
位置 | 描述 |
Rev-eng設(shè)置文件 | 該文件包含逆向工程配置和標簽,并保留它們以備將來使用。單擊Setup 按鈕指定現(xiàn)有文件或創(chuàng)建一個新文件。在找不到該向?qū)У那闆r下,向?qū)⒆詣觿?chuàng)建此文件。 |
定制修訂策略 | 允許指定自定義逆向工程策略類,此類允許您以編程方式自定義逆向工程過程的各個方面。更多詳細信息,請查看下方“使用自定義逆向工程策略”部分內(nèi)容。 |
類型映射 | 確定在字段映射的type屬性中使用Java還是Hibernate類型,例如java.lang.String vs. string。(僅在此向?qū)У?頁的“Customized Type Mappings”列表中找不到更特定的設(shè)置時,才使用此設(shè)置。) |
ID Generator | ID Generator是Hibernate映射文件中的必填字段,它定義了用于為持久類的實例生成唯一標識符的Java類。 如果未在該向?qū)У牡?頁上進行空白或更具體的設(shè)置,Hibernate映射引擎會為您選擇一個ID生成器。 |
生成基本類型的組合ID |
|
生成版本和時間戳標簽 | 如果啟用,則在生成的映射文件中,名為“version”和“timestamp”的列將表示為 |
啟用多對多檢測 | 確保在為進行逆向工程而選擇的表之間存在多對多關(guān)系時,將檢測到這些關(guān)系并生成相應(yīng)的代碼。 |
啟用多對一檢測 | 確保在為進行逆向工程而選擇的表之間存在多對一關(guān)系時,將檢測到這些關(guān)系并生成相應(yīng)的代碼。 |
定制類型映射 | 允許您使用“長度”、“比例”、“精度”和“可空性”作為JDBC類型的限定條件來指定從JDBC類型到Hibernate類型的自定義映射。 |
單擊兩個“Include Referenced Tables”復(fù)選框,使向?qū)г诜聪蚬こ踢^程中包括引用表。單擊完成。
注意:選擇表或列可以專門針對表或列定制逆向工程。
位置 | 描述 |
類名 | 與此表對應(yīng)的數(shù)據(jù)對象類的完全限定名。 |
ID Generator | 要用于此表的ID Generator。 |
JDBC類型 | 此列的JDBC類型覆蓋。 |
屬性名 | 與此列對應(yīng)的生成屬性的名稱。 |
Hibernate類型 | 與此列對應(yīng)的Hibernate類型 |
包括參考/參考表 | 將要反向工程的表集擴展為該表引用的其他表以及分別引用該表的表。 |
生成對ListedTable(fk)-> UnlistedTable和UnlistedTable(fk)-> ListedTable的支持 | 生成此表與其他表的關(guān)系相對應(yīng)的代碼(這些表沒有進行反向工程,并且不在此頁面的表列表中)。 |
逆向工程執(zhí)行以下操作:
創(chuàng)建Abstract <tablename>類。這個抽象類提供了必需的Hibernate兼容性功能,例如用于與數(shù)據(jù)庫表中的列相對應(yīng)的持久屬性的公共getter和setter方法。
創(chuàng)建<tablename> Java類,它是Abstract <tablename>類的具體子類。所述<表名> 類旨直接使用附加的業(yè)務(wù)和驗證邏輯進行修改,并且在后續(xù)的生成過程中不會被覆蓋。
創(chuàng)建.hbm.xml Hibernate映射描述符。這個文件指導(dǎo)Hibernate如何<tablename> Java類和數(shù)據(jù)庫表之間映射數(shù)據(jù)。
在hibernate.cfg.xml文件中注冊<tablename> .hbm.xml映射描述符。
創(chuàng)建<tablename> DAO Java類。該類提供對<tablename>數(shù)據(jù)對象類的便捷性訪問。
創(chuàng)建IBaseHibernateDAO接口和BaseHibernateDAO類。這些類對于基本DAO的功能是必需的,它們使用添加Hibernate功能時生成的Session工廠(com.myeclipse.hibernate.HibernateSessionFactory)來獲取Hibernate會話。
下圖突出顯示了所生成的類、關(guān)鍵方法和映射文件,以及對hibernate.cfg.xml文件中添加的映射文件的引用。
4.1使用Templates對生成的代碼進行微調(diào)
將模板文件下載并解壓到、文件系統(tǒng)。
按照zip文件中README.txt的說明自定義模板。
調(diào)用逆向工程向?qū)АT谙驅(qū)У牡谝豁撋?,選擇“Use Custom Templates”選項,然后在“Template Directory”字段中,指定包含您下載的模板的文件夾。
4.2使用Custom Reverse Engineering Strategy
右鍵單擊項目,選擇Properties,并選擇Java構(gòu)建路徑。
單擊Libraries標簽,然后單擊Add Library。
選擇MyEclipse Library,單擊Next,并選擇MyEclipse Persistence Tools。單擊Finish。
在項目中創(chuàng)建一個新類,來擴展org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy類。
定義單個參數(shù)構(gòu)造函數(shù),例如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”向?qū)У牡诙撋希付▌倓?chuàng)建的類。
*有關(guān)本教程更多信息,請點擊此處瀏覽>>>
想進一步了解MyEclips?【MyEclipse官方中文網(wǎng)】知你所需,解你所惑!
想與更多人聊MyEclips?加入MyEclipse中國(官方2):742336981暢所欲言吧!
想及時獲取MyEclips資訊?掃描下方二維碼,MyEclips信息跟你走!