1 先決條件 1.1 已安裝JDK(版本1.5以上)並配置環境變數 到http://java.sun.com上下載JDK,配置環境變數(我的電腦右鍵->屬性->高級->環境變數) JAVA_HOME:JDK安裝目錄 CLASS_PATH:JDK安裝目錄\lib PATH:JDK安裝目錄\bin 1. ...
1 先決條件
1.1 已安裝JDK(版本1.5以上)並配置環境變數
到http://java.sun.com上下載JDK,配置環境變數(我的電腦右鍵->屬性->高級->環境變數)
JAVA_HOME:JDK安裝目錄
CLASS_PATH:JDK安裝目錄\lib
PATH:JDK安裝目錄\bin
1.2 已安裝ant並配置環境變數
點擊http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.1-bin.zip 下載ant並解壓,設置環境變數(我的電腦右鍵->屬性->高級->環境變數)
ANT_HOME:ant解壓目錄
path="ant解壓目錄\bin"
之後再“運行”輸入cmd---ant 提示如下 說明ant安裝正確
1.3 MiddleGen下載
點擊http://jaist.dl.sourceforge.net/sourceforge/hibernate/Middlegen-Hibernate-r5.zip下載Middlegen-Hibernate-r5並解壓
2 所需jar包
生成hbm文件所需jar包
由於本例使用的是Mysql資料庫,所以需要:
mysql-connector-java-5.1.11-bin.jar
生成POJO時所需jar包
hibernate3.jar
dom4j-1.6.1.jar
可以點擊
http://nchc.dl.sourceforge.net/sourceforge/hibernate/hibernate-distribution-3.3.1.GA-dist.zip 下載,dom4j-1.6.1.jar位於 hibernate-distribution-3.3.1.GA\lib\required下(也可以通過http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip 下載)
hibernate-tools.jar
freemarker.jar
可以點擊
http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R200810311334.zip 下載,解壓後jar包位於
plugins\org.hibernate.eclipse_3.2.4.Beta1-R200810311334\lib\tools
slf4j-api-1.5.2.jar
slf4j-jdk14-1.5.2.jar
slf4j-log4j12-1.5.2.jar
可以點擊http://www.slf4j.org/dist/slf4j-1.5.2.zip 下載
3 生成過程
將下載的MiddleGen-Hibernate-r5解壓到任一目錄,併在build目 錄下新建一個文件夾mysrc
3.1 生成hbm文件
- 將Middlegen-Hibernate-r5.zip解壓至你所希望的目錄,本例放再d根目錄下
- 進入D:\Middlegen-Hibernate-r5\config\database找到你想使用的資料庫配置文件(.xml)本例使用mysql.xml
- 打開mysql.xml對其配置如下:
原文內容
<property name="database.script.file" value="${src.dir}/sql/${name}-mysql.sql"/>
<property name="database.driver.file" value="${lib.dir}/mysql-connector-java-3.0.16-ga-bin.jar"/>
<property name="database.driver.classpath" value="${database.driver.file}"/>
<property name="database.driver" value="org.gjt.mm.mysql.Driver"/>
<property name="database.url" value="jdbc:mysql://localhost/employee"/>
<property name="database.userid" value="root"/>
<property name="database.password" value="root"/>
<property name="database.schema" value=""/>
<property name="database.catalog" value=""/>
<property name="jboss.datasource.mapping" value="mySQL"/>
修改
<property name="database.driver.file" value="${lib.dir}/mysql-connector-java-3.0.16-ga-bin.jar"/>
將紅字部分改為你所導入的mysql驅動包名(驅動應放在放再D:\Middlegen-Hibernate-r5\lib下)
<property name="database.url" value="jdbc:mysql://localhost/employee"/>
設置mysql的url
<property name="database.userid" value="root"/>
<property name="database.password" value="root"/>
設置用戶名、密碼
- 保存完成
- 修改Middlegen根目錄下的build.xml
MiddleGen界面說明
進入Middlegen的GUI界面後,可以看到,資料庫中的表結構已經導入到MiddleGen的操作界面中,選定資料庫表視圖中的表元素,我們即可調整各個資料庫表的屬性。
1.Domain Class Name 對應POJO的類名。
2.Key Generator
主鍵生成器
可選項說明:
①assigned.主鍵由外部程式生成,無需Hibernate參與。
②hilo 通過hi/lo演算法實現的主鍵生成機制,需要額外的資料庫表保存主鍵生成歷史狀態。
③seqhilo 與hilo類似,通過hi/lo演算法實現的主鍵生成機制,只是主鍵歷史狀態保存在Sequence中,適用於支持Sequence的資料庫,如 Oracle。
④increment 主鍵按數值順序遞增。此方式的實現機製為在當前應用實例中維持一個變數,以保存著當前的最大值,之後每次需要生成主鍵的時候將此值加1作為主鍵。這種方式可能產生的問題是,如果當前有多個實例訪問同一個資料庫,那麼由於各個實例各自維護主鍵狀態,不同實例可能產生相同主鍵,從而造成主鍵重覆異常。因此,同一資料庫有多個實例訪問,此方式必須避免使用。
⑤identity 採用資料庫提供的主鍵生成機制。如 DB2,sql server,Mysql中的主鍵生成機制。
⑥sequence 採用資料庫提供的sequence機制生成主鍵。如oracle中的sequence機制。
⑦native 由Hibernate根據底層資料庫自行判斷採用identity,hilo,sequence其中一種作為主鍵生成方式。
⑧uuid.hex 由Hibernate基於128位唯一值產生演算法生成16進位數值(編碼後以長度32的字元串表示)作為主鍵。
⑨uuid.string 與uuid.hex類似,只是生成的主鍵未進行編碼(長度16).在某些資料庫中可能出現問題(如PostgreSQL)。
⑩foreign 使用外部表的欄位作為主鍵。
一般而言,使用uuid.hex方式生成主鍵將提供最好的性能和資料庫平臺適應性。
另外,由於常用的資料庫,如oracle,DB2,SqlServer,MySql等,都提供了易用的主鍵生成機制(auto-Increase欄位或者sequence)。我們可以在資料庫提供的主鍵生成機制上,採用generator-class=native的主鍵生成方式。
3.key-generator後面的可輸入部分。 如果需要採用定製的主鍵產生演算法,則在此處配置主鍵生成器,主鍵生成器必須實現net.sf.hibernate.id.IdentifierGenerator介面。
4.Schema Name 資料庫Schema Name
5.Persister 自定義持久化實現類類名。如果系統中還需要Hibernate之外的持久層實現機制,如通過存儲過程得到目標數據集,甚至從LDAP中獲取數據來填充我們的POJO。
6.Enable proxies 是否使用代理(用於延遲載入[Lazt Loading])
7.Dynamic Update 如果選定,則生成UPDATE SQL時不包含未發生變動的欄位屬性,這樣可以在一定程度上提升sql執行效能。
8.Mutable 類是否可變,預設為選定(可變)。如果不希望應用程式對此類對應的數據進行修改(如對於資料庫視圖),則可取消其選定狀態,之後對此類的delete和update都將失效。
9.Lifestyle interface 是否實現lifestyle介面。lifestyle介面提供了數據固化過程中的控制機制,通過實現該介面,我們可以在資料庫操 中加入回調機制,如在資料庫操作之前,之後觸髮指定操作。
10.Validatable interface 是否實現Validatable 介面。通過實現Validatable 介面,我們可以在數據被固化到資料庫表之前對其合法性進行驗證。要註意的是,通過實現lifestyle介面,同樣可以在資料庫操作之前進行合法性驗證。不同的是,Validatable 介面中定義的方法可能會被多次調用,因此設計中應避免在Validatable 介面的validate方法的實現中加入業務邏輯的驗證。
3.2 生成POJO
將以下jar包複製到MiddleGen-Hibernate-r5文件夾lib目錄
hibernate3.jar, hibernate-tools.jar, dom4j-1.6.1.jar, slf4j-log4j12-1.5.2.jar, slf4j-api-1.5.2.jar, slf4j-jdk14-1.5.2.jar, freemarker.jar
再次打開build.xml文件
修改第212行
<target name="hbm2java" description="Generate .java from .hbm files.">
<taskdef
name="hbm2java"
classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
classpathref="lib.class.path"
/>
<hbm2java output="${build.gen-src.dir}">
<fileset dir="${build.gen-src.dir}">
<include name="**/*.hbm.xml"/>
</fileset>
</hbm2java>
</target>
為
<target name="hbm2java" description="Generate .java from .hbm files.">
<taskdef
name="hbm2java"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="lib.class.path"
/>
<hbm2java destdir="${build.gen-src.dir}">
<configuration>
<fileset dir="${build.gen-src.dir}">
<include name="**/*.hbm.xml"/>
</fileset>
</configuration>
<hbm2java jdk5="true"/>
</hbm2java>
</target>
由於Middlegen生成的hbm文件是裡面的引用是hibernate2的DTD,因此修改生成的hbm.xml裡面hibernate2的DTD 由
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
變為
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
(也就是將2變為3,這樣就不會出現“Don’t use old DTDs,read the Hibernate3.x Migration Guide!”錯誤)
運行ant hbm2java,生成的POJO文件位於build\mysrc\model文件夾下。