1. 程式人生 > 其它 >Java中使用Hibernate系列之對映檔案學習(第一節)

Java中使用Hibernate系列之對映檔案學習(第一節)

我們使用Hibernate時,它需要知道怎樣去載入(load)和儲存(store)持久化類的物件,這也正是Hibernate對映檔案發揮作用的地方;這個需要對映檔案告訴Hibernate,應該訪問哪個資料庫(database)裡面的哪個表(table)及應該使用表裡面的哪些欄位(column)。

網路配圖

下面是一個對映檔案的基本結構:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
[...]
</hibernate-mapping>

這裡注意的是Hibernate的DTD是非常複雜的,程式碼編輯器會自動完成那些用來對映的XML元素(element)和屬性(attribute)的建立,注意Hibernate不會主動從web中載入DTD檔案,但它會首先在應用程式的classpath中查詢。DTD檔案已包括在hibernate3.jar裡,同時也在Hibernate釋出包的src/目錄下。

為了講解方便,在以後的例子裡我們會省略DTD的宣告,但在實際的應用程式中,DTD宣告是必須完整的。 在hibernate-mapping標籤(tag)之間, 含有一個class元素,所有的持久化實體類都需要一個這樣的對映,來把類物件對映到SQL資料庫裡的表。

<hibernate-mapping>
<class name="events.Event" table="EVENTS">
</class>
</hibernate-mapping>

現在Hibernate已經知道怎樣把Events類的物件持久化到資料庫的EVENTS表裡,以及怎樣從EVENTS表載入到Events類的物件,每個例項對應著資料庫表中的一行;這個重點說明主鍵(唯一的)屬性如何對映到資料庫表,這裡我們用Hibernate的識別符號生成策略來產生主鍵欄位。

網路配圖

<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

id元素是識別符號屬性的宣告,name="id" 聲明瞭Java屬性的名字 - Hibernate會使用getId()和setId()來訪問它,column屬性則告訴Hibernate我們使用EVENTS表的哪個欄位作為主鍵;巢狀的generator元素指定了識別符號生成策略,在這裡我們指定native,它根據已配置的資料庫(方言)自動選擇最佳的識別符號生成策略;Hibernate支援由資料庫生成全域性唯一性(globally unique)和應用程式指定策略來生成識別符號。

接下來我們宣告對映檔案裡面包含需要持久化屬性,預設情況下,類裡面的屬性都被視為非持久化的:

<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>

和id元素一樣,property元素的name屬性告訴Hibernate使用哪個getter和setter方法;在此例中,Hibernate會尋找getDate()/setDate(), 以及getTitle()/setTitle()。

網路配圖

最後我們應該把這個對映檔案儲存為Event.hbm.xml,且就在EventJava類的原始檔目錄下,對映檔案可隨意地命名,但hbm.xml的字尾已成為Hibernate開發者的約定;應用程式的程式碼結構如下:

.

+lib

<Hibernate and third-party libraries>

+src

+events

Event.java

Event.hbm.xml

好了,這一節的學習先到這裡,後面章節中會繼續學習Hibernate。我們學習方式是每一節學習一個知識點(每天花10分鐘學習)。