這篇文章主要談?wù)凥ibernate的入門(mén)開(kāi)發(fā),例子很簡(jiǎn)單,就是向數據表中添加用戶(hù)名和密碼。我分別使用了三種方法,一種是直接寫(xiě)代碼,寫(xiě)Hbm映射文件等;一種是通過(guò)Hbm映射文件來(lái)生成代碼;一種是通過(guò)代碼來(lái)生成Hbm映射文件。使用了一些自動(dòng)化工具,XMLBuddy是用來(lái)編輯XML文件的,JBoss Eclipse IDE是用來(lái)編寫(xiě)Doclet標記的。這篇文章還談到了一些Eclipse的使用技巧,比如建立“用戶(hù)庫”、“生成 Getter 和 Setter”等。
關(guān)于一些軟件的使用技巧,我以前的文章都有提及,這里不多說(shuō)了,必要時(shí)會(huì )提示一下。
1. 所需軟件
● Ant 1.6.2 http://ant.apache.org
● XDoclet 1.2.2 http://xdoclet.sourceforge.net/xdoclet/
● XMLBuddy http://www.xmlbuddy.com/
● JBoss Eclipse IDE http://www.jboss.org/products/jbosside
看看說(shuō)明,需要挑選與使用的eclipse相對應的版本,這里選擇JBossIDE-1.4.1-e30.zip,這是它的鏡像下載地址:
● Hibernate http://www.hibernate.org/
同時(shí)也要把 Hibernate Extensions 2.1.3 下載了,它包含一些工具類(lèi)。
● MySQL 4.1.8
注意需要mysql-connector-java-3.0.16-ga-bin.jar文件
2. 安裝和配置
這里著(zhù)重指出一下,需要在環(huán)境變量中設置 ANT_HOME ,并將其指向Ant安裝目錄,還要在Path變量值中添加 “%ANT_HOME%\bin;” 可以參考 java環(huán)境變量設置 。
· XMLBuddy 和Jboss-ide 我都是采用links方式安裝的,
● 建立庫文件夾:
在D盤(pán)下新建一個(gè)java目錄,在此目錄下新建一個(gè)Hibernate子目錄,在此子目錄下再新建一個(gè)lib子目錄。
D:\
-java
-Hibernate
-lib
· 將下載的hibernate-2.1.8.zip解壓,如解壓后的目錄名為hibernate-2.1,將這個(gè)目錄下的hibernate2.jar復制到先前建立的lib目錄下,即D:\java\Hibernate\lib目錄;
· 然后將hibernate-2.1目錄下的lib子目錄中的以下文件也復制到這個(gè)lib目錄下:
jta.jar cglib-full-2.0.2.jar commons-collections-2.1.1.jar commons-logging-1.0.4.jar commons-lang-1.0.1.jar dom4j-1.4.jar ehcache-0.9.jar log4j-1.2.8.jar odmg-3.0.jarodmg-3.0.jar
· 解壓hibernate-extensions-2.1.3.zip,將其子目錄tools中的hibernate-tools.jar和子目錄lib中的velocity-1.3.1.jar、jdom.jar 也復制到D:\java\Hibernate\lib目錄中
· 解壓xdoclet-bin-1.2.2.zip,將其子目錄lib中的xdoclet-1.2.2.jar、xdoclet-hibernate-module-1.2.2.jar、xjavadoc-1.1.jar、xdoclet-xdoclet-module-1.2.2.jar 也復制到D:\java\Hibernate\lib目錄中
· 最后將mysql-connector-java-3.0.16-ga-bin.jar文件復制到這個(gè)lib目錄下。
這樣,需要用到的庫文件已經(jīng)準備好了,如果認為這樣比較麻煩,也可以將jar文件全部復制到lib目錄。下面介紹如何在Eclipse中設置“用戶(hù)庫”。
● 設置“用戶(hù)庫”
·窗口 ->首選項 ->Java ->構建路徑 ->用戶(hù)庫,

· 然后單擊“添加JAR”

這樣,一個(gè)用戶(hù)庫文件就做好了,如果要更新Eclipse時(shí),可以將其先導出,然后再導入即可。
這樣做,對庫文件便于管理,而且如果需要替換或者升級的話(huà)都比較方便。
● 設置“構建路徑”
· 點(diǎn)擊菜單“窗口”->首選項,以下都在“首選項”中配置:
Java->構建路徑 

這里以一個(gè)簡(jiǎn)單的程序來(lái)示范Hibernate的配置與功能,在這個(gè)例子中的一些操作,實(shí)際上會(huì )使用一些自動(dòng)化工具來(lái)完成,而不一定親自手動(dòng)操作設定,這邊完全手動(dòng)的原因,在于讓你可以知道Hibernate的基本流程。
這是整個(gè)項目的結構:

好了,下面就開(kāi)始創(chuàng )建項目了。
1. 創(chuàng )建項目
· 新建一個(gè)Java項目:HibernateBegin_1,注意選中“創(chuàng )建單獨的源文件夾和輸出文件夾”。點(diǎn)擊“下一步”,切換到“庫”,點(diǎn)擊“添加庫”,如下圖:

· 選擇“用戶(hù)庫”

· 勾選先前設置好的hibernate用戶(hù)庫。

2. 建立可持久化類(lèi)
· 下面開(kāi)始創(chuàng )建一個(gè)新類(lèi):User ;包名:javamxj.hibernate ;
然后添加三個(gè)變量(斜體),代碼如下:
/* * 采用常規方法開(kāi)發(fā)一個(gè)簡(jiǎn)單的Hibernate實(shí)例 * 創(chuàng )建日期 2005-3-31 * @author javamxj(分享java快樂(lè )) * @link Blog: htpp://javamxj.mblogger.cn * htpp://blog.csdn.net/javamxj/ */package javamxj.hibernate;public class User { private int id; private String username; private String password; }
· 點(diǎn)擊工具欄上的“源代碼(S)”,選擇其中的“生成 Getter 和 Setter”(右擊,在彈出菜單也可選擇),如圖:

點(diǎn)擊“確定”后,生成如下代碼:
/* * 采用常規方法開(kāi)發(fā)一個(gè)簡(jiǎn)單的Hibernate實(shí)例 * 創(chuàng )建日期 2005-3-31 * @author javamxj(分享java快樂(lè )) * @link Blog: htpp://javamxj.mblogger.cn * htpp://blog.csdn.net/javamxj/ */package javamxj.hibernate;public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }}
好了,這個(gè)類(lèi)完成了。它是一個(gè)普通的Java對象(Plain Old Java Objects,就是POJOs,有時(shí)候也稱(chēng)作Plain Ordinary Java Objects),表示一個(gè)數據集合。下面建立一個(gè)Hbm文件將這個(gè)類(lèi)映射到數據庫的表格上。
3. 映射文件
在javamxj.hibernate包下,新建一個(gè)名稱(chēng)為“User.hbm.xml”的文件,使用XMLBuddy編輯它(參考:利用XMLBuddy在Eclipse中開(kāi)發(fā)XML ),這樣比較方便。文件內容如下:
<>xml version="1.0" encoding="GBK"?>DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="javamxj.hibernate.User" table="UserTable"> <id name="id"> <generator class="assigned" /> < span="">id> <property name="username" /> <property name="password" /> < span="">class>< span="">hibernate-mapping>
這個(gè)XML文件定義了對象屬性映射到數據庫表的關(guān)系,這里采用了assigned(程序設置)方式生成主鍵。當然還可以使用其它的方式來(lái)產(chǎn)生主鍵,后面的文章就采用了其它的方式產(chǎn)生主鍵。
4. 配置文件
Hibernate可以使用XML或屬性文件來(lái)進(jìn)行配置,配置文件名默認為“hibernate.cfg.xml”(或者hibernate.properties)。
在src目錄下,新建一個(gè)hibernate.cfg.xml文件,內容如下:
<>xml version=‘1.0‘ encoding=‘GBK‘?>DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"><hibernate-configuration> <session-factory> <property name="show_sql">true< span="">property> <property name="dialect">net.sf.hibernate.dialect.MySQLDialect< span="">property> <property name="connection.driver_class">com.mysql.jdbc.Driver< span="">property> <property name="connection.url"> jdbc:mysql://localhost:3306/HibernateTest?useUnicode=true&characterEncoding=GBK < span="">property> <property name="connection.username">root< span="">property> <property name="connection.password">javamxj< span="">property> <mapping resource="javamxj/hibernate/User.hbm.xml"/> < span="">session-factory>< span="">hibernate-configuration>
注意:這里使用的是“jdbc:mysql://localhost:3306/HibernateTest?useUnicod...”中的HibernateTest數據庫,你需要在MySql中建立這個(gè)數據庫。
5. 測試程序
在javamxj.hibernate包下,新建一個(gè)Test類(lèi),內容如下:
/* * 簡(jiǎn)單測試一下User類(lèi) * 創(chuàng )建日期 2005-3-31 * @author javamxj(分享java快樂(lè )) */package javamxj.hibernate;import net.sf.hibernate.*;import net.sf.hibernate.cfg.*;public class Test { public static void main(String[] args) { try { SessionFactory sf = new Configuration().configure() .buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); user.setUsername("Blog"); user.setPassword("分享java快樂(lè )"); session.save(user); tx.commit(); session.close(); } catch (HibernateException e) { e.printStackTrace(); } }}
這里簡(jiǎn)單說(shuō)說(shuō)一下流程,首先初始化Configuration,加載Hibernate的配置信息,然后Configuration取得SessionFactory對象,并由它來(lái)開(kāi)啟一個(gè)Session,它代表對象與表格的一次會(huì )話(huà)操作,而 Transaction則表示一組會(huì )話(huà)操作,我們只需要直接操作User對象,并進(jìn)行Session與Transaction的相關(guān)操作, Hibernate就會(huì )自動(dòng)完成對數據庫的操作。
6. 配置數據庫
在運行測試程序之前,還必須先設置好數據庫。
在MySQL中建立一個(gè)HibernateTest數據庫,并建立UserTable表,SQL語(yǔ)句如下:
CREATE TABLE usertable (
ID int(6) NOT NULL auto_increment,
username varchar(24) NOT NULL default ‘‘,
password varchar(24) NOT NULL default ‘‘,
PRIMARY KEY (ID)
);
ID int(6) NOT NULL auto_increment,
username varchar(24) NOT NULL default ‘‘,
password varchar(24) NOT NULL default ‘‘,
PRIMARY KEY (ID)
);
這里,HibernateTest與hibernate.cfg.xml配置文件中的HibernateTest相對應,UserTable與hbm映射文件中的UserTable相對應。
7. 運行程序
右擊Test.java,點(diǎn)擊運行,可以看到控制臺輸出一系列信息,最后一條輸出語(yǔ)句應該是:
Hibernate: insert into UserTable (username, password, id) values (?, ?, ?)
在下篇文章中會(huì )介紹如何利用log4j來(lái)控制輸出信息。
同時(shí),在數據庫中可以看到,數據已經(jīng)添加進(jìn)表里了:

小結:
Hibernate原理方面我不想多說(shuō),實(shí)際上知道也不多,況且這方面的資料很多,比如Hibernate本身自帶的中文文檔、夏昕編寫(xiě)的《Hibernate開(kāi)發(fā)指南》、良葛格編寫(xiě)的“Hibernate入門(mén)”等都是非常不錯的,現在關(guān)于Hibetnate的書(shū)籍也多了起來(lái)。
我所作的工作就是要使新手能盡快上手Hibernate,理論方面我不想過(guò)多糾纏,盡量以實(shí)例說(shuō)話(huà)。我想,與其憑空說(shuō)一個(gè)技術(shù)多好多好,倒不如給我一個(gè)可以上手的實(shí)例操作一下。好了,不多說(shuō)廢話(huà)了。

