這篇文章是上兩篇文章《Eclipse快速上手Hibernate--1. 入門執行個體》和《Eclipse快速上手Hibernate--2. 利用Hbm對應檔開發》的延續,主要說的是如何利用XDocletHbm對應檔產生Hbm對應檔及資料表。可以參考XDoclet文檔中關於Hibernate的部分和夏昕編寫的《Hibernate開發指南》。同樣,這篇文章沒有過多談理論,只是給出了一個完整的執行個體加以說明。相關配置請參考上兩篇文章。
1. 建立項目 · 建立一個Java項目:HibernateBegin_3,注意選中“建立單獨的源檔案夾和輸出檔案夾”,同時添加“使用者庫”:hibernate。
2. 檔案User.java · 建立一個類,包名:javamxj.hibernate,類名:User。然後在產生的程式碼中添加變數,再利用“產生 Getter 和 Setter”,具體方式同《Eclipse快速上手Hibernate--1. 入門執行個體 》文章中的編輯User.java的方式一樣。 · 添加HibernateDoclet標記,關於如何利用JBoss-IDE添加XDoclet標記的技巧參考《Eclipse快速上手EJB -- 1. Lomboz + JBoss-IDE 配置2 》文中的關於JBoss-IDE的部分,這是添加HibernateDoclet後的代碼:
User.javaww w.china it power.co43ApGSN
/* * 採用HibernateDoclet開發一個簡單的Hibernate執行個體 * 建立日期 2005-3-31 * @author javamxj(分享java快樂) * @link Blog: htpp://javamxj.mblogger.cn * htpp://blog.csdn.net/javamxj/ */package javamxj.hibernate;/** * @hibernate.class table = "UserTable3" */public class User {private int id;private String username;private String password; /** * @hibernate.id * column = "ID" * generator-class = "hilo" */public int getId() {return id;}public void setId(int id) {this.id = id;}/** * @hibernate.property * length = "24" * not-null = "true" */public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}/** * @hibernate.property * column = "使用者名稱" * length = "24" * not-null = "true" */public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}}
· 添加類標記“ @hibernate.class table ="UserTable3" ”用來產生資料庫的表UserTable3。· “ @hibernate.id"用來產生主鍵,注意這裡採用是hilo(高低位)產生器,需要額外的資料庫表儲存主鍵產生曆史狀態。· “ @hibernate.property”描述POJO中屬性與資料庫表欄位之間的映射關係。 ● 更新xdoclet-hibernate-module
· 將XDoclet1.2.2中的xdoclet-hibernate-module-1.2.2.jar複製到JBossIDE-1.4.1-e30/eclipse/plugins/org.jboss.ide.eclipse.xdoclet.core_1.4.1目錄中,並且刪除其目錄下的xdoclet-hibernate-module-1.2.1.jar檔案,然後在eclipse介面中,視窗 ->喜好設定 ->JBoss-IDE ->XDoclet ->Code Assist:點擊右側的“Refresh XDoclet Data”欄,即可完成更新。如果要替換其它的模組,步驟與此類似。
3. 項目結構 · 將上篇文章中的“build.xml”複製到項目根目錄下,設定檔“hibernate.cfg.xml”複製到src目錄下,這時的項目結構
4. 運行任務 · 雙擊“generate-hbm”任務,然後按一下“F5”功能鍵重新整理一下包“javamxj.hibernate”,應該可以看到這個包下的“User.hbm.xml”。檔案如下:
User.hbm.xmlww w.china it power.co43ApGSN
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping
>
<class
name="javamxj.hibernate.User"
table="UserTable3"
dynamic-update="false"
dynamic-insert="false"
select-before-update="false"
optimistic-lock="version"
>
<id
name="id"
column="ID"
type="int"
>
<generator class="hilo">
<!--
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-User.xml
containing the additional parameters and place it in your merge dir.
-->
</generator>
</id>
<property
name="password"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="password"
length="24"
not-null="true"
/>
<property
name="username"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="使用者名稱"
length="24"
not-null="true"
/>
<!--
To add non XDoclet property mappings, create a file named
hibernate-properties-User.xml
containing the additional properties and place it in your merge dir.
-->
</class>
</hibernate-mapping>
●
產生資料表· 啟動MySql,應該確定含有HibernateTest資料庫,不過這次不需要建立資料表了。· 雙擊“schemaexport”任務,然後重新整理項目根目錄,會發現出產生的“schema-export.sql”檔案。
| schema-export.sql |
drop table if exists UserTable3 drop table if exists hibernate_unique_key create table UserTable3 ( ID integer not null, password varchar(24) not null, 使用者名稱 varchar(24) not null, primary key (ID) ) create table hibernate_unique_key ( next_hi integer ) insert into hibernate_unique_key values ( 0 ) |
· 切換到資料庫中,會發現已經自動產生了資料表usertable3和hibernate_unique_key:
5. 測試程式 好了,將上篇文章中的test.java檔案複製到包“javamxj.hibernate”下,然後右擊運行這個檔案,可以看到資料表中產生的資料(圖中的資料是連續運行4次後產生的)。
6. Log4j
Log4j是一個開放源碼的項目。它允許開發員以任意的間隔來控制日誌的輸出。它通過設在外部的設定檔而達到運行時靈活的設定。 運行Log4j的庫檔案都已經放到先前建立的hibernate庫檔案夾中了,你只要找到下載的hibernate 2.1.8壓縮檔中的etc目錄,複製其中的log4j.properties檔案到項目中的src目錄即可。 運行test.java,可以看到控制台的輸出語句似乎和先前沒有用Log4j沒有什麼區別。 現在開啟log4j.properties,找到“log4j.logger.net.sf.hibernate=info”語句,將其改成“log4j.logger.net.sf.hibernate=
warn”,再次運行test.java,可以看到控制台的輸出語句只有兩條了:
21:03:55,687 WARN Configurator:125 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/java/Hibernate/lib/ehcache-0.9.jar!/ehcache-failsafe.xml
Hibernate: insert into UserTable3 (password, 使用者名稱, ID) values (?, ?, ?)警告資訊是指緩衝設定檔沒有找到,以後用到時再談談這一點。 好了,hibernate結合Log4j的使用就是這麼簡單。關於Log4j的使用,比較簡單,網上的資料也很多,自己可以google一下。
小結:
Hibernate的開發相當靈活,可以採用多種方式開發。 · 只有Hbm對應檔:對應檔---hbm2java----java---SchemaExport----資料表· 只有Java: java---XDoclet---Hbm----SchemaExport----資料表· 如果只有資料表呢?可以採用Middlegen: 資料表---Middlegen---Hbm----hbm2java----java 關於利用Middlegen開發Hibernate的方法,可以參考夏昕編寫的《Hibernate開發指南》。 · 至於有關Hibernate的Eclipse外掛程式,也有很多,可以看看《Working with Hibernate in Eclipse》。