我的 O/R Mapping 之旅(一)

    首先要感謝我所在的 Team 意識到了傳統 JDBC 開發的種種不足,轉而開始關注 O/R Mapping 領域的成果。說到 O/R Mapping,我認爲在對象數據庫還沒有真正成熟的時候它是一個不錯的選擇,看看 SUN JDO 2.0 規範吧,它的即將發佈將會把這個領域推向更高的境界。再看看我們的開源社區呢,喔!發現了 Hibernate!從現在開始,我的焦點將放在 Hibernate 上面,一個優秀的O/R Mapping 工具。

   

    在沒有正式開始旅行之前,讓我們區分幾個名詞。POJO:在 Hibernate 中代表包含 SeterGeter 這些最基本操作的值對象。而 BO:代表包含一些業務邏輯的值對象,它的作用域很大,也就是說 BO 在充當持久類的同時可以傳到 UI 層。PO:代表持久對象,是納入 Hibernate 管理框架中的,在一定程度上可以和值對象的概念互換,值對象經過 Hibernate 進行處理,就變成了 PO Hibernate 配置文件:hibernate.cfg.xml hibernate.properties,不過推薦使用 XML 格式。映射文件 *.hbm.xml:映射文件的作用是將 POJO 與關係型數據庫數據相綁定,作爲一個橋樑。另外,爲數據庫中的表進行手工編寫映射文件可不是件好差事,幸好開源社區中也有一羣同樣想法的人,他們開發了 hibernateSynchronizer 映射工具,可到 http://www.binamics.com/hibernatesync/eclipse2.1/ 下載。

   

    好了,現在去 http://www.hibernate.org 下載 Hibernate 的開發包(目前的版本是 2.1.6)。接着打開 Eclipse 2.1,在更新管理器中安裝 hibernateSynchronizer。據說 Eclipse 3.0 已內置映射工具,不過我沒有試。安裝完畢後,新建一個 Web 應用程序 HibernateTest,接着爲這個應用程序添加 Hibernate 類庫 hibernate-2.1.6/hibernate-2.1/hibernate2.jar 及其依賴類庫、數據庫連接包,強烈建議把 hibernate-2.1.6/hibernate-2.1/lib 下的所有類庫全部加載,如下圖:

      

    接着使用 hibernateSynchronizer 來生成 hibernate.cfg.xml 文件,新建——>其他——>Hibernate Configuration File,我使用的是 SQL Server 數據庫,各項配置參數見下圖:

   

     生成出來的 hibernate.cfg.xml 文件:

   

    在項目的 src 目錄下新建四個包,分別是bobo.basebo.mappingcom.dao,具體什麼作用,到時候他們都會一一呈獻。在開始映射文件前還要做一件事,爲應用程序 HibernateTest 配置 hibernateSynchronizer ,我更喜歡自己寫 DAO ,所以沒有配置 Data Access Objects,其他各項參數如下圖:

 

      被映射的表 AutoInfo 結構如下,id爲其主鍵:

                 

                 

    新建——>其他——>Hibernate Mapping File,配置好參數再“Refresh”後,選擇要映射的表,注意千萬不要在 800*600 下映射文件!否則有些按鈕不會出現,各項配置參數見下圖:

   

   

       終於、終於,映射文件 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"
    />
    

    <property
     column="id"
     length="18"
     name="Id"
     not-null="true"
     type="integer"
    />
    

替換爲:

    <id name="Id" column="id" type="integer">
       <generator class="native"/>
    </id>
    

    <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 的旅程先到這裏吧,後面的路將會越來越坎坷!你準備好了嗎?

      

(請注意!引用、轉貼本文應註明原作者:Rosen Jiang 以及出處:http://blog.csdn.net/rosen

      

(請注意!引用、轉貼本文應註明原作者:Rosen Jiang 以及出處:http://blog.csdn.net/rosen

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章