??? 首先要感謝我所在的 Team 意識到了傳統(tǒng) JDBC 開發(fā)的種種不足,轉(zhuǎn)而開始關(guān)注 O/R Mapping 領(lǐng)域的成果。說到 O/R Mapping ,我認為在對象數(shù)據(jù)庫還沒有真正成熟的時候它是一個不錯的選擇,看看 SUN 的 JDO 2.0 規(guī)范吧,它的即將發(fā)布將會把這個領(lǐng)域推向更高的境界。再看看我們的開源社區(qū)呢,喔!發(fā)現(xiàn)了 Hibernate !從現(xiàn)在開始,我的焦點將放在 Hibernate 上面,一個優(yōu)秀的 O/R Mapping 工具。
???? 在沒有正式開始旅行之前,讓我們區(qū)分幾個名詞。 POJO :在 Hibernate 中代表包含 Seter 、 Geter 這些最基本操作的值對象。而 BO :代表包含一些業(yè)務(wù)邏輯的值對象,它的作用域很大,也就是說 BO 在充當持久類的同時可以傳到 UI 層。 PO :代表持久對象,是納入 Hibernate 管理框架中的,在一定程度上可以和值對象的概念互換,值對象經(jīng)過 Hibernate 進行處理,就變成了 PO 。 Hibernate 配置文件: hibernate.cfg.xml 或 hibernate.properties ,不過推薦使用 XML 格式。映射文件 *.hbm.xml :映射文件的作用是將 POJO 與關(guān)系型數(shù)據(jù)庫數(shù)據(jù)相綁定,作為一個橋梁。另外,為數(shù)據(jù)庫中的表進行手工編寫映射文件可不是件好差事,幸好開源社區(qū)中也有一群同樣想法的人,他們開發(fā)了 hibernateSynchronizer 映射工具,可到 http://www.binamics.com/hibernatesync/eclipse2.1/ 下載。
???? 好了,現(xiàn)在去 http://www.hibernate.org 下載 Hibernate 的開發(fā)包(目前的版本是 2.1.6 )。接著打開 Eclipse 2.1 ,在更新管理器中安裝 hibernateSynchronizer 。據(jù)說 Eclipse 3.0 已內(nèi)置映射工具,不過我沒有試。安裝完畢后,新建一個 Web 應(yīng)用程序 HibernateTest ,接著為這個應(yīng)用程序添加 Hibernate 類庫 hibernate-2.1.6\hibernate-2.1\hibernate2.jar 及其依賴類庫、數(shù)據(jù)庫連接包,強烈建議把 hibernate-2.1.6\hibernate-2.1\lib 下的所有類庫全部加載,如下圖:
??????
??? 接著使用 hibernateSynchronizer 來生成 hibernate.cfg.xml 文件,新建—— > 其他—— >Hibernate Configuration File ,我使用的是 SQL Server 數(shù)據(jù)庫,各項配置參數(shù)見下圖:
???
?????生成出來的 hibernate.cfg.xml 文件:
??? 在項目的 src 目錄下新建四個包,分別是 bo 、 bo.base 、 bo.mapping 、 com.dao ,具體什么作用,到時候他們都會一一呈獻。在開始映射文件前還要做一件事,為應(yīng)用程序 HibernateTest 配置 hibernateSynchronizer ,我更喜歡自己寫 DAO ,所以沒有配置 Data Access Objects ,其他各項參數(shù)如下圖:
?
????? 被映射的表 AutoInfo 結(jié)構(gòu)如下, id 為其主鍵:
?????????????????
??? 新建—— > 其他—— >Hibernate Mapping File ,配置好參數(shù)再“ Refresh ”后,選擇要映射的表,注意千萬不要在 800*600 下映射文件!否則有些按鈕不會出現(xiàn),各項配置參數(shù)見下圖:
?????? 終于、終于,映射文件 AutoInfo.hbm.xml 終于出來了!
??? <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC?"-//Hibernate/Hibernate Mapping DTD//EN"?" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd " > <hibernate-mapping package="bo.base">?<class name="AutoInfo" table="AutoInfo">??<property???column="owner_dept"???length="500"???name="OwnerDept"???not-null="false"???type="string"?? />??<property???column="license_plate"???length="50"???name="LicensePlate"???not-null="false"???type="string"?? />??<property???column="owner"???length="50"???name="Owner"???not-null="false"???type="string"?? />??<property???column="owner_adderss"???length="1000"???name="OwnerAdderss"???not-null="false"???type="string"?? />??<property???column="id"???length="18"???name="Id"???not-null="true"???type="integer"?? />?</class></hibernate-mapping>
??? <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC?"-//Hibernate/Hibernate Mapping DTD//EN"?" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd " >
<hibernate-mapping package="bo.base">?<class name="AutoInfo" table="AutoInfo">??<property???column="owner_dept"???length="500"???name="OwnerDept"???not-null="false"???type="string"?? />??<property???column="license_plate"???length="50"???name="LicensePlate"???not-null="false"???type="string"?? />??<property???column="owner"???length="50"???name="Owner"???not-null="false"???type="string"?? />??<property???column="owner_adderss"???length="1000"???name="OwnerAdderss"???not-null="false"???type="string"?? />??<property???column="id"???length="18"???name="Id"???not-null="true"???type="integer"?? />?</class></hibernate-mapping>
??? 需要修改一下 AutoInfo.hbm.xml 文件為其定義主鍵,把:
????<property???? column="id"???? length="18"???? name="Id"???? not-null="true"???? type="integer"??? />
替換為:
????<id name="Id" column="id" type="integer">?????? <generator class="native"/>????</id> ????????
??? 再接再厲,為映射文件生成 POJO。修改 hibernate.cfg.xml 文件在 </session-factory> 標簽的上面加上剛才映射的文件 <mapping resource="bo/mapping/AutoInfo.hbm.xml" />。接著在“包資源管理器”中點擊 AutoInfo.hbm.xml 右鍵,Hibernate Synchronizer——>Synchronize Files。再看看 src 中的包:
??????????????? ???????????????
???????????????
??? O/R Mapping 的旅程先到這里吧,后面的路將會越來越坎坷!你準備好了嗎?請注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處:http://www.tkk7.com/rosen
Powered by: BlogJava Copyright © Rosen