alxe1528

          BlogJava 聯系 聚合 管理
            3 Posts :: 11 Stories :: 2 Comments :: 0 Trackbacks

          5.4 創建 Hibernate Java 表映射 


          這個部分展示了使用 MyEclipse Hibernate 工具來反向工程生成 Java 數據對象并從現有的數據庫表格生成映射的過程.

          打開 MyEclipse Hibernate 透視圖.  從主菜單欄, 選中 Window > Open Perspective > Other > MyEclipse Hibernate
          選中你在 Hibernae 配置中所使用的數據庫連接屬性
          瀏覽數據庫的目錄結構, 直到你找到了一個想要創建 Hibernate 映射的表格/實體

          注意: 在我們的例子里我們使用了 TEST 數據庫下的 ECHO_MESSAGE 表格; 對于其它數據庫和表格的操作過程基本上都是一樣的.

          右鍵點擊表格然后選中 Hibernate Reverse Engineering, 如圖 12 所示. 這將啟動 Hibernate Reverse Engineering 向導.
          另外, 你也可以從 DB Browser 那里拖動表格, 然后將它放到 Hibernate 配置編輯器里也可以啟動這個向導.

          注意: 你可以在 DB Browser 中選中多個表格然后同時對它們進行反向工程.


          圖 12. 對 ECHO_MESSAGE 數據庫表格啟動 Hibernate Reverse Engineering 向導

          Hibernate Reverse Engineering 向導一共有 3 頁.


          圖 13.  Hibernate Reverse Engineering 向導 - 頁面 1
          點擊Java src folder 右側的 Browse... 按鈕來查看可用的 Hibernate 項目以及源碼目錄, 這些目錄將用來存放最終生成的文件.
          選擇 HibernateDemo 項目中的src 文件夾. 點擊 Java package輸入框右側的 Browse... 按鈕然后選中包 com.genuitec.hibernate完成如圖 13 所示的向導中的其余的內容然后選擇 Next.

          注意:
          向導的第 2 頁和第 3 頁用來自定義反向工程處理過程.
          當然也可以現在就直接點擊 Finish 按鈕開始處理過程, 不對后兩頁的設置進行任何自定義.

          表 4 - Hibernate Reverse Engineering 向導 - 第 1

          選項 描述

          Java src folder

          選中映射文件, POJO 和 DAO 生成后所在的項目和源碼文件夾.

          Java package

          映射文件, POJO 和 DAO 生成后所在的包.

          Hibernate mapping file

          從選中的表格生成映射文件.

          Update hibernate configuration

          將生成后的映射文件添加到 Hibernate 配置文件中.

          Java Data Object

          為映射文件和表格生成對應的數據對象 (POJO).

          Create abstract class

          為每個數據對象生成一個抽象的父類. 這個抽象類將在以后的重新生成過程中覆蓋掉, 但是對應的子類將不會被覆蓋掉.

          Base persistence class

          如果需要的話, 輸入生成的 POJO 所要集成的父類的完整名稱.

          Java Data Access Object

          生成便于訪問映射后的類和表格的數據訪問對象. 用戶可以在 Basic, Spring 和 JNDI DAO 中選擇一種.

          Generate precise findBy methods

          為映射類中的每個屬性生成一個 "findBy" 方法.
          例如 findByFirstName("name");

          Use custom templates

          覆蓋 MyEclipse 的內部 velocity 模版為你自己的版本.
          參考 使用模版來更好的調節生成的代碼 來獲取更多信息.

          Template directory

          包含了自定義模版的目錄樹的根節點.


          圖 14.  Hibernate Reverse Engineering 向導 - 第 2

          第 2 頁可以使用默認的設置, 選擇 Next.

          表 5 - Hibernate Reverse Engineering 向導 - 第 2 頁

          選項 描述

          Rev-eng settings file

          這個文件包含了反向工程的配置和選項以供以后使用. 點擊 Setup... 按鈕來選擇現有的文件或者創建一個新的文件.
          如果找不到一個這樣的配置文件的話向導將會自動創建此文件.

          Custom rev-eng strategy

          允許你指定一個自定義的反向工程策略類. 這個類允許你用編程的方式來自定義反向工程處理過程的各個方面. 參考 使用自定義反向工程策略 來獲取詳細信息.

          Type Mapping

          決定是否在類型映射屬性中使用 Java 或者 Hibernate 類型, 例如 java.lang.String 對應 string. 這個設置只能在向導第 3 頁的 Customized Type Mappings 列表中沒有指定更多信息時才能使用.

          ID Generator

          ID Generator 是 Hibernate 映射文件必須有的內容. 它定義了持久類實例的唯一主鍵生成器 Jaav 類.  參考 資源 部分里面的 Hibernate 文檔鏈接, 里面描述了每個 ID 生成器的詳細信息.
          如果留空或者更詳細的配置在這個向導的第 3 頁沒有配置, Hibernate 映射引擎將自動為你選擇一個 ID 生成器.

          Generate basic typed composite IDs

          如果數據庫表格包含有多個列的主鍵, 將總是使用 <復合主鍵> 映射.

          如果這個選項啟用并且有對應的多個外鍵, 每個主鍵列將依然會被作為'簡單的' 標量 (string, long, 等), 而不是引用到一個實體. 將會創建 <many-to-one> 元素, 但是它們將會標記為非可更新和非可插入的字段.

          如果你禁用這個選項(默認推薦用這種方式), 將會創建 <key-many-to-one> 元素來代替上面的生成內容.

          Generate version and timestamp tags

          如果啟用, 名為 "version" 和 "timestamp" 的列將會在生成的映射文件中作為 <version><timestamp> 標記出現.

          Customized Type Mappings

          允許你來指定一個自定義的 JDBC 類型到 Hibernate 類型的轉換, 使用 Length, Scale, Precision 和 Nullability 作為精度控制對應原來的 JDBC 類型.


          再第 3 頁頁可以使用默認的設置, 選擇 Finish 將啟動反向工程處理.


          圖 15.  Hibernate Reverse Engineering 向導 - 第 3 頁

          表 6 - Hibernate Reverse Engineering 向導 - 第 3

          選項 描述

          Class name

          對應當前數據庫表格的數據對象類的完整名稱.

          ID Generator

          想要對當前表所使用的 ID 生成器.

          JDBC type

          對當前列所使用的 JDBC 類型覆蓋.

          Property name

          對應當前列所生成的屬性名.

          Hibernate type

          對應當前列的 Hibernate 類型.

          Include referenced / referencing tables

          包含反向工程時當前數據庫表引用的表格以及其它引用到當前表的數據庫表.

          Generate support for ListedTable(fk)->UnlistedTable and UnlistedTable(fk)->ListedTable

          生成關聯到當前表格的關聯表的尚未反向工程過的代碼, 這些表在當前配置頁面尚未被顯示.

          在這個向導完成之后將會進行下面所列的操作:

          創建類 AbstractEchoMessage . 這個抽象類提供了所需的 Hibernate 兼容的功能例如 public 的讀取器和設置器方法, 這些方法對應的持久化屬性和 ECHO_MESSAGE 數據庫表格中的列相對應.
          創建了一個 EchoMessage Java 類, 是 AbstractEchoMessage 類的一個具體的子類.EchoMessage 的目的是為了被修改后提供額外的業務和驗證邏輯, 并且不會被后續的生成代碼過程所覆蓋.
          創建了 EchoMessage.hbm.xml Hibernate 映射描述符. 這個文件指示 Hibernate 如何將 EchoMessage Java 類和 ECHO_MESSAGE 數據庫表格中的數據相互映射.
          在文件 hibernate.cfg.xml 中注冊 EchoMessage.hbm.xml 映射描述符.
          創建了 Java 類 EchoMessageDAO. 這個類提供了對 EchoMessage 數據對象類的方便的訪問和操作.創建 IBaseHibernateDAO 接口和 BaseHibernateDAO 類. 這些類對基本的 DAO 來說是必要的, 因為它使用了添加 Hibernate 功能時候所生成的 Session 工廠類(com.genuitec.hibernate.HibernateSessionFactory)來獲取 Hibernate 會話.

          圖 15 高亮顯示了所生成的類, 關鍵方法和映射文件, 以及被添加到 hibernate.cfg.xml 文件中的對生成的映射文件的引用.


          圖 15.  Hibernate 反向工廠向導執行結束后更新過的項目內容

          —————————————————————————————————————————————————————————————

          5.5 使用模版調整生成更好的代碼

           

          下載并解壓縮這個文件到你的電腦的文件系統上.按照 README.txt 文件中的說明來自定義這個模版.調用反向工程向導, 在第 1 頁選擇啟用 Use custom templates 選項, 然后將 Template directory 指向到包含模版樹的文件夾e.5.6 使用自定義反向工程策略

           

          向你的項目中添加 MyEclipse Persistence Tools 類庫.
          右鍵點擊你的項目然后選擇 Properties.在 Java Build Path 頁面, 在 Libraries 面板下選擇 Add Library....選擇 MyEclipse Libraries ,接著選中 MyEclipse Persistence Tools.點擊 Finish.
          圖 16.  添加 MyEclipse Persistence Tools 類庫

          在你的項目中創建一個新類, 讓這個類繼承自 org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy 類.定義一個單參數的構造器, 然后覆蓋其中的感興趣的一個或者多個方法, 例如, columnToPropertyName.
          這里是一個例子, 將在所有生成的屬性前添加一個 "ME_" 前綴.
          MyStrategy.java
          package com.genuitec.hibernate;

          import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
          import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
          import org.hibernate.cfg.reveng.TableIdentifier;

          public classMyStrategy extendsDelegatingReverseEngineeringStrategy {

            publicMyStrategy(ReverseEngineeringStrategystrategy) {   
              super(strategy);   
            }

            publicString columnToPropertyName(TableIdentifier table, String columnName) {   
             return"ME_" + super.columnToPropertyName(table, columnName);   
            } 

          }
          圖 17. MyStrategy.java 源代碼清單

          在反向工程向導的第 2 頁, 選中剛才所創建的類

          圖 18.  指定反向工程策略5.7 編輯映射文件


          MyEclipse 包含了定制過的 XML 編輯器來專門用于修改 Hibernate 映射文件 (*.hbm.xml). 當雙擊映射文件的時候編輯器將會自動打開. 你也可以通過右鍵點擊文件然后選擇 Open With > MyEclipse Hibernate Mapping Editor.

          功能

          超鏈接瀏覽到引用到的類和屬性.類名自動完成提示. 屬性名自動完成提示. 映射文件元素, 屬性和值的內容完成提示.


          圖 19.  Hibernate 映射文件編輯器

          —————————————————————————————————————————————————————————————

           

          6. 使用 HQL 編輯器


          MyEclipse 包含了一個 Hibernate 查詢語言編輯器以及幾個視圖, 允許你根據當前的 Hibernate 配置來執行 HQL 查詢語句.

          功能

          內容自動完成提示. Hibernate Dynamic Query Translator 在敲入 HSQL 查詢語句時查看翻譯后的 SQL 語句. Hibernate Query Results 視圖可以查看多個查詢結果集; 結果的屬性顯示在 Properties 視圖. Query Parameters 視圖可以很方便的執行帶有參數的查詢. 項目選擇器允許你隨時切換不同的 Hibernate 項目中的 Hibernate 配置.
          下面的步驟將指導你如何使用 HQL 編輯器右鍵點擊 Package Explorer 中的 HibernateDemo 項目. 在右鍵菜單中的 MyEclipse 項目下, 選擇 Open HQL Editor...
          注意: HQL 編輯器也會在你嘗試查看后綴為 hql 的文件的時候打開.


          圖 20.  打開 HQL 編輯器

          如果你沒有在 Hibernate 透視圖下工作, 你將會被提示切換到相應的視圖, 同意切換即可.
          注意: 總是可以切換到這個視圖, 通過選擇菜單項 Window > Open Perspective > Other > MyEclipse Hibernate當編輯器打開時, 鍵入 "from EchoMessage" 點擊 Run 圖標或者按下 Ctrl + F9 來執行查詢語句.


          圖 21.  在 HSQL 編輯器中執行查詢

          使用 Query Parameters 視圖來執行帶參數的查詢.


          圖 22.  Query Parameters 視圖

          注意: 如果你在 HSQL 編輯器為特定的項目初始化后修改了配置, 映射文件或者數據類, 一定要記得點擊嵌入的工具欄上的 Refresh 按鈕來讓編輯器使用最新的配置信息.

          —————————————————————————————————————————————————————————————

           

          7. 測試HibernateDemo應用

          既然 Hibernate 持久化功能已經整合進了 HibernateDemo 項目, 接下來的步驟就是對它進行測試.  一種測試 Hibernate 持久化功能的方法是創建一個帶 main 方法的 Java 類.  測試類將使用 Hibernate 向導所生成的 Java 對象和 HibernateSessionFactory.  請查看圖 18 中所示的 HibernateSessionFactory 類中所生成的兩個重要的方法, 在測試代碼中將會使用這兩個方法.


          圖 23. HibernateSessionFactory 方法

          顯示了 HibernateSessionFactory 中的兩個重要的靜態方法.

          getSession(): 這個方法將會返回一個 Session 變量, 可以用來訪問 Hibernate Session 類.  任何時間你想使用 Hibernate 會話的時候你都可以調用這個方法來獲取緩存過的這個 Hibernate 會話對象.

          closeSession(): 如果一個會話已經啟動過, 這個方法就簡單的關閉它.


          下面是創建測試類源代碼的步驟列表:

          創建一個新的 Java 類: File > New > Class
          輸入包名
          輸入類名(Name): HibernateReadTest
          如 圖 19 所示完成頁面設置, 然后選擇 Finish


          圖 24. 新建 Java 測試類

          接下來, 打開文件 HibernateReadTest.java , 替換源代碼為圖 20 中所列的內容. 

          HibernateReadTest.java
          package com.genuitec.hibernate;

          import org.hibernate.HibernateException;

          public class HibernateReadTest {

            public static void main(String[] args) {
              // Step 1 - Create the DAO
              EchoMessageDAO dao = new EchoMessageDAO();
              try {
                // Step 2 - Use findById to retrieve the message with ID = 1
                EchoMessage echoMessage = dao.findById(new Long(1));
                System.out.println("Entity retrieval successful, message is: "
                    + echoMessage.getMsg());
              catch (HibernateException e) {
                System.err.println("Entity retrieval failed.");
                e.printStackTrace();
              finally {
                try {
                  dao.getSession().close();
                catch (Exception e) {
                  // do nothing
                }
              }
            }

          }
          圖 25. HibernateTest.java 源代碼清單

          保存 HibernateReadTest.java
          Package Explorer 中選中文件 HibernateReadTest.java
          在頂部菜單欄中選擇 Run 菜單, 接著選擇 Run > Run as > Java Application

          這是, Console 視圖將會打開, 如果測試成功的話你將會看到如下面的 圖 21所示的輸出內容.
          注意: 如果你看到了 log4j 警告, 你可以忽略它們即可.


          圖 26. HibernateReadTest Console 輸出
          —————————————————————————————————————————————————————————————

           

          8. 使用示例

          HibernateDemo 項目下載 HibernateDemo.zip選擇 Import > Existing Projects into Workspace, 選中 Select archive file 選項然后指向下載的 zip 文件. 點擊 Finish 來導入到你的 Eclipse 工作臺.需要做以下修改來重新配置這個項目和你的開發環境保持一致. 從你的數據庫復制 JDBC 驅動 JAR 文件到項目中. 通過右鍵點擊文件然后選擇 Build Path > Add to Build Path 來將它添加到項目的構造路徑中. 連接到你的數據庫然后執行 DDL/DDL.sql 文件中的代碼來創建示例數據庫并填充里面的值.

          在執行之前, 也許需要修改表格的數據庫前綴并使它和你的數據庫的 DDL 規范一致. 修改配置文件 hibernate.cfg.xml , 將里面的連接設置修改為你自己的數據庫配置.
          還可能需要修改 EchoMessage.hbm.xml 來修改 class 元素里面指定的 schema 屬性為對應的數據庫名稱. 一些其它的文件已經包含在這里:
          log4j.properties 用來控制 log4j 類庫里面的日志等級.
          ehcache.xml 用來控制 ehcache 類庫.

          HibernateWriteTest.java 是一個簡單的演示類來展示 DAO 是如何寫入數據到數據庫的.

          —————————————————————————————————————————————————————————————

           

          9. 總結

          使用 MyEclipse 進行 Hibernate 開發的教程到此結束. 我們還有更多的快速入門文檔, 包括如何使用 Database Explorer, Struts, JSF, Web Projects, 修改, 應用服務器配置, EJB 開發, 以及企業應用項目. 更多信息請訪問 MyEclipse Quickstart library .

          —————————————————————————————————————————————————————————————

           

          10. 用戶反饋

          如果你對本文有評論或者建議, 請提交到 MyEclipse Documentation Forum .

          —————————————————————————————————————————————————————————————

           

          11.資源

          HibernateDemo 示例項目MyEclipse Reverse-Engineering 模版

          從 Sun Microsystems.下載 Java 2 SDK, Standard Edition 1.4 from
          從 Eclipse Foundation 下載 Eclipse 3.2 SDK 或者更高版本
          下載 MyEclipse 5.0 30 天試用版; 過期后需要注冊.
          要了解更多 Hibernate 的信息請訪問 官方 Hibernate Documentation 站點.
          訪問 MyEclipse Quickstart Library 獲得更多 MyEclipse 教程.
          posted on 2011-12-27 22:11 鄭健成 閱讀(1439) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 鸡东县| 左贡县| 都匀市| 二手房| 富顺县| 宜昌市| 申扎县| 古田县| 宣恩县| 芜湖县| 建始县| 平昌县| 黄陵县| 建湖县| 宁波市| 望奎县| 沂源县| 营口市| 德钦县| 得荣县| 耒阳市| 法库县| 霍州市| 铜川市| 安阳市| 深州市| 化州市| 泽州县| 澄迈县| 石狮市| 道真| 馆陶县| 乌苏市| 大庆市| 龙州县| 南木林县| 松原市| 鲁山县| 平邑县| 周口市| 岑巩县|