到http://java.sun.com上下載JDK,配置環境變量(我的電腦右鍵->屬性->高級->環境變量)
JAVA_HOME:JDK安裝目錄
CLASS_PATH:JDK安裝目錄\lib
PATH:JDK安裝目錄\bin
點擊http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.1-bin.zip 下載ant並解壓,設置環境變量(我的電腦右鍵->屬性->高級->環境變量)
ANT_HOME:ant解壓目錄
path="ant解壓目錄\bin"
之後再“運行”輸入cmd---ant 提示如下 說明ant安裝正確
點擊http://jaist.dl.sourceforge.net/sourceforge/hibernate/Middlegen-Hibernate-r5.zip下載Middlegen-Hibernate-r5並解壓
生成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 下載
將下載的MiddleGen-Hibernate-r5解壓到任一目錄,並在build目 錄下新建一個文件夾mysrc
原文內容
<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界面說明
進入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方法的實現中加入業務邏輯的驗證。
將以下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文件夾下。