alxe1528

          BlogJava 聯(lián)系 聚合 管理
            3 Posts :: 11 Stories :: 2 Comments :: 0 Trackbacks

          5.4 創(chuàng)建 Hibernate Java 表映射 


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

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

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

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

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


          圖 12. 對 ECHO_MESSAGE 數(shù)據(jù)庫表格啟動 Hibernate Reverse Engineering 向?qū)?/span>

          Hibernate Reverse Engineering 向?qū)б还灿?3 頁.


          圖 13.  Hibernate Reverse Engineering 向?qū)?- 頁面 1
          點擊Java src folder 右側(cè)的 Browse... 按鈕來查看可用的 Hibernate 項目以及源碼目錄, 這些目錄將用來存放最終生成的文件.
          選擇 HibernateDemo 項目中的src 文件夾. 點擊 Java package輸入框右側(cè)的 Browse... 按鈕然后選中包 com.genuitec.hibernate完成如圖 13 所示的向?qū)е械钠溆嗟膬?nèi)容然后選擇 Next.

          注意:
          向?qū)У牡?2 頁和第 3 頁用來自定義反向工程處理過程.
          當(dāng)然也可以現(xiàn)在就直接點擊 Finish 按鈕開始處理過程, 不對后兩頁的設(shè)置進行任何自定義.

          表 4 - Hibernate Reverse Engineering 向?qū)?- 第 1

          選項 描述

          Java src folder

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

          Java package

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

          Hibernate mapping file

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

          Update hibernate configuration

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

          Java Data Object

          為映射文件和表格生成對應(yīng)的數(shù)據(jù)對象 (POJO).

          Create abstract class

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

          Base persistence class

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

          Java Data Access Object

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

          Generate precise findBy methods

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

          Use custom templates

          覆蓋 MyEclipse 的內(nèi)部 velocity 模版為你自己的版本.
          參考 使用模版來更好的調(diào)節(jié)生成的代碼 來獲取更多信息.

          Template directory

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


          圖 14.  Hibernate Reverse Engineering 向?qū)?- 第 2

          第 2 頁可以使用默認(rèn)的設(shè)置, 選擇 Next.

          表 5 - Hibernate Reverse Engineering 向?qū)?- 第 2 頁

          選項 描述

          Rev-eng settings file

          這個文件包含了反向工程的配置和選項以供以后使用. 點擊 Setup... 按鈕來選擇現(xiàn)有的文件或者創(chuàng)建一個新的文件.
          如果找不到一個這樣的配置文件的話向?qū)詣觿?chuàng)建此文件.

          Custom rev-eng strategy

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

          Type Mapping

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

          ID Generator

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

          Generate basic typed composite IDs

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

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

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

          Generate version and timestamp tags

          如果啟用, 名為 "version" 和 "timestamp" 的列將會在生成的映射文件中作為 <version><timestamp> 標(biāo)記出現(xiàn).

          Customized Type Mappings

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


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


          圖 15.  Hibernate Reverse Engineering 向?qū)?- 第 3 頁

          表 6 - Hibernate Reverse Engineering 向?qū)?- 第 3

          選項 描述

          Class name

          對應(yīng)當(dāng)前數(shù)據(jù)庫表格的數(shù)據(jù)對象類的完整名稱.

          ID Generator

          想要對當(dāng)前表所使用的 ID 生成器.

          JDBC type

          對當(dāng)前列所使用的 JDBC 類型覆蓋.

          Property name

          對應(yīng)當(dāng)前列所生成的屬性名.

          Hibernate type

          對應(yīng)當(dāng)前列的 Hibernate 類型.

          Include referenced / referencing tables

          包含反向工程時當(dāng)前數(shù)據(jù)庫表引用的表格以及其它引用到當(dāng)前表的數(shù)據(jù)庫表.

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

          生成關(guān)聯(lián)到當(dāng)前表格的關(guān)聯(lián)表的尚未反向工程過的代碼, 這些表在當(dāng)前配置頁面尚未被顯示.

          在這個向?qū)瓿芍髮M行下面所列的操作:

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

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


          圖 15.  Hibernate 反向工廠向?qū)?zhí)行結(jié)束后更新過的項目內(nèi)容

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

          5.5 使用模版調(diào)整生成更好的代碼

           

          下載并解壓縮這個文件到你的電腦的文件系統(tǒng)上.按照 README.txt 文件中的說明來自定義這個模版.調(diào)用反向工程向?qū)? 在第 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 類庫

          在你的項目中創(chuàng)建一個新類, 讓這個類繼承自 org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy 類.定義一個單參數(shù)的構(gòu)造器, 然后覆蓋其中的感興趣的一個或者多個方法, 例如, 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 源代碼清單

          在反向工程向?qū)У牡?2 頁, 選中剛才所創(chuàng)建的類

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


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

          功能

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


          圖 19.  Hibernate 映射文件編輯器

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

           

          6. 使用 HQL 編輯器


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

          功能

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


          圖 20.  打開 HQL 編輯器

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


          圖 21.  在 HSQL 編輯器中執(zhí)行查詢

          使用 Query Parameters 視圖來執(zhí)行帶參數(shù)的查詢.


          圖 22.  Query Parameters 視圖

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

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

           

          7. 測試HibernateDemo應(yīng)用

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


          圖 23. HibernateSessionFactory 方法

          顯示了 HibernateSessionFactory 中的兩個重要的靜態(tài)方法.

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

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


          下面是創(chuàng)建測試類源代碼的步驟列表:

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


          圖 24. 新建 Java 測試類

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

          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所示的輸出內(nèi)容.
          注意: 如果你看到了 log4j 警告, 你可以忽略它們即可.


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

           

          8. 使用示例

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

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

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

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

           

          9. 總結(jié)

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

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

           

          10. 用戶反饋

          如果你對本文有評論或者建議, 請?zhí)峤坏?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 鄭健成 閱讀(1437) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 富宁县| 友谊县| 民县| 攀枝花市| 兴安盟| 马关县| 福建省| 嘉义县| 清水河县| 耒阳市| 石屏县| 武威市| 宣武区| 廊坊市| 旌德县| 邹城市| 钟祥市| 内黄县| 龙游县| 神农架林区| 柯坪县| 绥宁县| 龙江县| 黄骅市| 通江县| 原阳县| 甘肃省| 随州市| 岚皋县| 六安市| 澄城县| 台前县| 温泉县| 江口县| 北票市| 江安县| 榆社县| 双鸭山市| 都匀市| 刚察县| 新晃|