1. 程式人生 > >MyEclipse Hibernate 入門教程中文版(含視訊)

MyEclipse Hibernate 入門教程中文版(含視訊)

導讀:
  宣告: 中文文字版權歸 劉長炯 所有, 原文及相關的圖片等資源的版權歸原作者 Genuitec L.L.C 公司所有.
  1. 簡介
  歡迎閱讀 MyEclipse 的 Hibernate 入門教程. 在這個教程裡我們將會介紹一些 Hibernate 框架基本功能的使用, 例如在 MyEclipse 中進行 OR 對映.
  就核心而言, Hibernate 是 OR-mapping 技術的具體實現, 用來在執行的時候對映資料庫表格到 Java 物件. 使用像 Hibernate 這樣的持久化框架可以讓開發人員關注於如何編寫業務邏輯而不是去編寫正確有效的持久層(包括但不限於 DAO, SQL 查詢, JDBC 程式碼, 連線管理等).
  然而, 要使用 Hibernate, 必須生成正確的持久化對映檔案, 設定資料庫連線屬性以及編寫 DAO 來讀寫對映的實體類. 很幸運的是, 使用 MyEclipse 的開發人員不需要寫這樣的程式碼因為 MyEclipse 會自動生成所有的程式碼. 這一點自動生成的程式碼可以將你從編寫 Hibernate 程式碼中解放出來, 這樣你就可以集中精力在最重要的任務上: 編寫應用的業務邏輯.
  2.
建議的聽眾
  這個教程的目標受眾是那些好歹對 MyEclipse 或者 Eclipse 有所瞭解的開發人員, 應該掌握使用 IDE 進行瀏覽以及理解一些常見的概念例如 "View 檢視" . 另外, 開發人員最好熟悉 Java 中的持久化開發 (JDBC, EJB, iBatis, JPA, 等等.), 這樣才能更快的理解 Hibernate 扮演的角色. 儘管這個教程介紹了一些 Hibernate 的基礎只是, 但是這並不能代替 Hibernate 官方網站的 Hibernate 參考手冊, 這些資訊位於文末的 資源部分. Hibernate 包含了很多功能來支援企業級別的應用開發, 這些可以通過官方參考文件或者閱讀高質量的 Hibernate 書籍來學習.
  如果您對 MyEclipse 和 Hibernate 都感到不熟悉, 這個教程可以幫你熟悉兩個部分的基礎知識. 要學習更多的 MyEclipse 或者 Hibernate 文件, 請閱讀我們的產品 文件或者文末的 資源部分.
  3.
系統需求
  這個教程基於 MyEclipse 5.1 製作, 捆綁的是 Hibernate 3.1 類庫. 如果你在使用其它版本的 MyEclipse, Hibernate, 絕大部分的螢幕操作和說明都將是十分相似的.
  如果你使用的是最新版本的 MyEclipse, 並且發現本教程的一些部分和你使用 MyEclpse 時所看到的螢幕不一樣, 請 告訴我們, 我們(注: MyEclipse 文件團隊, 不是我, 翻譯這份文件的人) 將會確保解決任何不一致的地方.
  4. Hibernate 介紹
  在早期的 Java 資料庫和網站開發中, 開發人員通過 java.sql包裡面的各式各樣的類來操作資料庫; 你甚至可以記起來自己當時怎麼寫的. 編寫的方式基本上就是通過 DriverManager獲取 Driver, 建立 Connection, 使用 Connection, 正確處理異常, 關閉連線等等. 這種情況下常見問題包括忘記關閉資料庫連線, 或者執行一段時間後出現了連線異常.
  幾年之後 "連線池" 成了個大話題因為它可以讓開發人員不用再關心建立和管理(關閉)資料庫連線, 這樣可以集中精力於他們的 SQL 和 ResultSet分析程式碼中. 這樣, 我們幾乎解決了長時間執行的應用程式裡面的連線異常的問題. 然而, 還是經常能看到成百上千行的程式碼來生成一段查詢資料的SQL 然後分析 ResultSet來填充查詢結果.
  又是幾年過去了, 某些人產生了一個想法: 自動將 ResultSet裡面的結果直接對映成 Java 物件, 這解決了大部分的像模版一樣的重複多餘的分析結果集的程式碼. 這時候 Java 資料庫開發已經前進了好幾步, 已經變得相對很容易了. 在這些基礎之上, Hibernate 出現在我們的面前.
  Hibernate 帶來的想法不僅僅是自動化這些過程, 而且在記憶體中管理物件的狀態, 它來關心什麼時候以及如何將物件值"讀取"或者"寫入"資料庫. 忽然的, 所有的開發人員都在完全使用物件(或者對映的物件)並且讓 Hibernate 來處理其它的事情. 開發人員完全不再需要編寫 JDBC 和 SQL 程式碼(譯者注: 這只是用物件方式設計資料庫的新專案中才可以, OR 這個詞限定了它的適用範圍, 並不是什麼專案都能用 Hibernate 的). 現在他們通過持久化框架的程式碼來代替過去所寫的那些複雜的程式碼.
  在 Hibernate 出現的時候, 其它的可用的持久化技術包括 EJB 2.x. Hibernate 的適時出現, 易用性, 以及大量開發人員的支援導致它很快在 Java 開發領域聲名雀起.
  在這個教程中, 我們將會看一看如何使用 MyEclipse 開發 Hibernate 來簡化開發過程, 甚至比單獨使用 Hibernate 更方便. 事實上, MyEclipse 通過在短短几秒內生成 Java 應用的持久層的程式碼, 不需要你來編寫任何 Hibernate 對映或者配置檔案.
  我們通過建立一個簡單的資料庫開始, 稍後這個資料庫將會被反向工程來生成到一個啟用了 Hibernate 的專案中. 接下來, 我們將會編寫一些簡單的 Java 程式碼來使用 MyEclipse 所自動生成的 Hibernate 程式碼來儲存, 讀取以及更新資料庫中的資訊.
  5.
開始工作
  如果你需要這個教程所建立的專案檔案, 以及所使用的資料庫表格的建表 SQL 指令碼, 可以在文末的 資源部分找到. 不過還是強烈鼓勵讀者自己照著教程來建立這個專案.
  要在 MyEclipse 中開始使用 Hibernate 和 Spring, 首先我們需要有一個數據庫連線來供程式來使用. 在這裡, 使用的是 MySQL 5, 事先建立了一張示例表格 user table . 我們使用 MySQL Connector/J JDBC 驅動來連線到安裝好的 MySQL. 現在首先來建立一個新的連線, 在 MyEclipse 中連線到我們的資料庫:
  圖 1. 建立資料庫連線
  現在已經建立好了連上了資料庫的連線, 第二步就是建立一個啟用了Hibernate 功能的專案 (Java, Web, Web Service, 等等, 都可以). 可以先建立一個任意型別的基本專案, 例如 Java 或者 Web 專案, 然後通過 MyEclipse選單下的選項來新增 Hibernate capabilities給當前專案, 如下所示:
  圖 2. 建立一個支援 Hibernate 的專案
  6. 反向工程
  現在已經建好了資料庫連線和配置好的專案, 接下來要做的就是使用 MyEclipse 來進行反向工程, 從資料庫表格生成 Hibernate (Java) 物件並把這些物件放到當前的專案中去.
  在下面的例子中, 我們使用了最簡單模式下的反向工程, 全部採用預設設定. 當然, 如果願意你也可以通過點選 "Next" 按鈕切換螢幕時來選擇一些選項例如主鍵生成策略, 物件名字, 型別以及其它設定. 現在讓我們開始反向工程表格:
  圖 3. 反向工程從 user 表生成 Hibernate (Java) 物件
  現在資料庫表格已經被自動反向工程到我們的專案中了, MyEclipse 中有很多種 Hibernate 工具可以使用(甚至不需要寫程式碼!). 第一個要看的工具是 HSQL 編輯器.
  HQL 編輯器, 以及其它的 HQL 檢視都位於 Hibernate 透檢視中, 可以協助開發, 執行或者測試 HQL 查詢. HQL 是一種類似於 SQL的語言, 叫做 " Hibernate 查詢語言". 它可以從某種意義上看作簡化過的 SQL, 但是用的是物件名字和屬性來代替資料庫表和欄位的名字. 可以在位於 資源部分的 Hibernate 參考文件中來詳細的學習 HQL.
  使用 HQL 編輯器你可以即時編寫 HQL 然後執行. 編輯器通過使用 MyEclipse 從資料庫反向工程所生成的物件, 把 HQL 查詢翻譯成 SQL(顯示於介面的右下側), 然後加以執行. 查詢結果將會返回為 Java 物件然後顯示在介面的左下側. 讓我們來看看工作過程:
  圖 4. 使用 HQL 編輯器和 HQL 檢視
  7. 編寫和執行 Hibernate 程式碼
  儘管熟悉 MyEclipse 提供的工具很重要, 不過我們只需要瞭解部分工具就行了, 所以讓我們寫點自己的程式碼測試吧!
  像我們以前提到的那樣, 使用 MyEclipse 的一個最大的好處就是可以生成所有的模式化的 Hibernate 對映和 DAO 的程式碼. 這意味著反向工程資料庫之後你就可以開始編寫自己的程式來讀取, 寫入以及更新資料庫中的資料了.
  在這個教程裡面我們講編寫一些簡單的方法, 依次執行下面的3個操作:
  建立一個新 User然後把他新增到資料庫中
  根據主鍵從資料庫中載入 User, 並打印出他的資訊
  修改 User的值, 更新資料庫中的記錄然後打印出來修改過的值進行驗證
  這三個方法 ( addUser, listUser, changeUser) 將在新建的類裡面的 main方法中呼叫. 要更好的理解這個 Hibernate 程式碼如何編寫的, 讓我們建立這個類, 將方法複製到類裡面(使用複製和貼上)然後一行一行的檢查:
  圖 5. 建立一個使用我們所生成的 Hibernate 程式碼的新類
  看過程式碼後我們可以很直接的理解所有的事情. 我們使用 MyEclipse 為我們生成的 DAO 類來獲取, 更新以及儲存我們的物件到資料庫中, MyEclipse/Hibernate 來關心所有的其它細節的實現. 沒有比這更簡單的了.
  現在到了有趣的地方了, 讓我們執行程式碼並且看看是不是真正的進行了正確的操作:
  圖 6. 執行我們的示例 Hibernate 程式碼
  真棒! 工作的結果完全符合我們的預期! 我們使用 HQL Editor 來查詢資料庫並確保我們的使用者儲存成功. 另外, 我們還可以很容易的切換到 Database 透檢視然後查詢資料庫來檢查表格中的使用者記錄.
  8. 小結
  儘管教程裡面的例子非常簡單, 但是涉及的技術和資訊對我們理解 Hibernate 和 MyEclipse 都是至關重要的. 這個教程中所涉及的基礎知識對任何使用 Hibernate 的專案都是有效的: 將物件對映到資料庫的核心思想. 在這些基本的功能正常工作後, 你可以任意根據需要來增強, 擴充套件或者改變應用程式, 而 MyEclipse 將繼續幫助你開發和擴充套件.
  希望本教程對你有所幫助. 如果你對本教程有任何建議或者問題, 請 告訴我們. 使用者的反饋對我們編寫這些教材是非常用價值的.
  9. 常見問題
  Hibernate 和 EJB 3/ JPA相比如何?
  Hibernate 3.2 事實上相容 JPA, 實現了所有的標註, 可以自動化, 很容易的使用 JPA 來開發. 所以不用使用 JPA 的商業實現, 你可以保持所有的類檔案中的標準 JPA 標註不變, 而在底層實現選擇 Hibernate(譯者注: JPA 是介面/規範, Hibernate 是一種實現, Hibernate implements JPA, 這種策略和 JDBC, Web 容器等等的設計思想是一致的).
  Hibernate 是否能支援大型應用?
  當然可以. 事實上 Hibernate 的兩位建立者都擁有大型企業應用的顧問經驗. Hibernate 展現了他們對於應用程式持久層所持的觀點. 幾年之前, Gavin King, 向開源社群發出挑戰來尋找手工調優過的執行速度遠遠超過 Hibernate 所自動生成的SQL, 這說明 Hibernate 框架非常關注於功能, 易用性和效率.
  我是否需要在程式裡包含所有的 Hibernate 類庫? 檔案太多了!
  不需要. Hibernate 是個非常複雜的框架, 基於大量的第三方框架來實現. 你不需要很多 JAR 檔案, 這取決於你打算如何使用 Hibernate . Hibernate 釋出包裡面的 /lib 目錄下有個檔案叫 README, 這個檔案解釋了每個類庫的作用, 如果你想自己控制釋出哪些檔案, 可以參考這個檔案.
  Hibernate 中的"Session" 是什麼東西? 為什麼我必須和它打交道?
  Hibernate 在簡單的外表之下隱藏著許多 "魔法" . 一部分功能用來監視對映過的物件的狀態, 當發現它們被修改過後(例如呼叫了設定器方法), 然後及時儲存更改過的值到資料庫中. 在小系統中你可以想象 Hibernate 一次管理所有物件, 但是在很大的企業系統中可能會有上百萬的對映物件需要一次載入, 然而單臺電腦將不會有足夠的記憶體或者 CPU 週期來處理這麼多的實體. 這就是"session(會話)" 所起的作用. Hibernate 會話開啟後, 它就表示一個處理所有物件的容器. 大多數人發現可以使會話維持一個工作事務的工作時間, 儘管對於效能優先的應用程式來說, 會話維持的時間太短會帶來反覆建立所造成的開銷. 另一種 Hibernate 會話設計是使用一個 Servlet 過濾器, 當一個新 HTTP 會話建立時開啟 Hibernate 會話, 當 HTTP 會話銷燬時來關閉 Hibernate 會話. 對於大多數中等大小的 web 應用程式, 執行在相當好的電腦上這將會在效能和記憶體需求間獲得一個很好的平衡點. 儘管你一直都意識到什麼物件從資料庫載入和儲存, 然而當 session 保持不關閉的情況下, 這些物件有可能會留在記憶體中(譯者注: 也即佔用額外的系統記憶體或者說造成記憶體洩漏).
  MyEclipse FAQ
  常見問題 (FAQ) 支援論壇
  10. 資源
  下面是一些資源的連結, 我們希望能幫助解答您在閱讀本教程中遇到的大部分關於 Hibernate 的問題:
  檔案
  Hibernate 入門專案檔案(本教程所使用的專案原始碼)
  usertable 的建表 SQL 語句
  參考
  Hibernate 3.2 參考文件 ( HTML) ( PDF)
  Hibernate 3.x Javadoc
  Hibernate 3.2 標註 參考文件 ( HTML) ( PDF)
  EJB3 / JPA Javadoc(Hibernate 是 JPA 規範的相容實現)
  Hibernate Wiki
  基礎知識
  Hibernate 教程 - Hibernate 之路
  完整的 Hibernate 教程
  官方的 Hibernate 外部連結
  11. 反饋
  我們非常希望聽到您的聲音! 如果你喜歡本教程, 有建議甚至錯誤修正建議, 請告訴我們. 我們通過 文件論壇來跟蹤所有使用者對學習資料的建議. 請告訴我們您正在評論的是哪份 MyEclipse 資料這樣我們可以更快的查明出現問題的章節.

本文轉自
http://beansoft.java-cn.org/myeclipse_doc_cn/hibernateintroduction/