漫談Hibernate的前世今生

來源:互聯網
上載者:User

  Hibernate是一個免費的開源Java包,它使得與關聯式資料庫打交道變得十分輕鬆,就像您的資料庫中包含每天使用的普通Java對象一樣,同時不必考慮如何把它們從神秘的資料庫表中取出(或放回到資料庫表中)。它解放了您,使您可以專註於應用程式的對象和功能,而不必擔心如何儲存它們或稍後如何找到它們。

  曆史與背景

  大多數應用程式都需要處理資料。Java應用程式運行時,往往把資料封裝為相互串連的對象網路,但是當程式結束時,這些對象就會消失在一團邏輯中,所以需要有一些儲存它們的方法。有時候,甚至在編寫應用程式之前,資料就已經存在了,所以需要有讀入它們和將其表示為對象的方法。手動編寫代碼來執行這些任務不僅單調乏味、易於出錯,而且會佔用整個應用程式的很大一部分開發工作量。

  優秀的物件導向開發人員厭倦了這種重複性的勞動,他們開始採用通常的“積極”偷懶做法,即,建立工具,使整個過程自動化。對於關聯式資料庫來說,這種努力的最大成果就是對象/關係映射(ORM)工具。

  這類工具有很多,從昂貴的商業產品到內建於J2EE中的EJB標準。然而,在很多情況下,這些工具具有自身的複雜性,使得開發人員必須學習使用它們的詳細規則,並修改組成應用程式的類以滿足映射系統的需要。由於這些工具為應付更加嚴格和複雜的企業需求而不斷髮展,於是在比較簡單和常見的情境中,使用它們所面臨的複雜性反而蓋過了所能獲得的好處。這引起了一場革命,促進了輕量級解決方案的出現,而Hibernate就是這樣的一個例子。

  Hibernate的工作方式

  Hibernate不會對您造成妨礙,也不會強迫您修改對象的行為方式。它們不需要實現任何不可思議的介面以便能夠持續存在。惟一需要做的就是建立一份XML“映射文檔”,告訴Hibernate您希望能夠儲存在資料庫中的類,以及它們如何關聯到該資料庫中的表和列,然後就可以要求它以對象的形式擷取資料,或者把對象儲存為資料。與其他解決方案相比,它幾乎已經很完美了。

  由於本文只是一篇介紹性的文章,所以不會引入構建和使用Hibernate映射文檔的具體例子(我在《Hibernate: A Developer's Notebook》一書的頭幾章中已經介紹了一個例子)。此外,在網上和Hibernate的線上文檔中,還可以找到一些不錯的例子,請參見下面的“其他資訊”部分。它實際上相當直觀。應用程式物件中的屬性以一種簡單而自然的方式與正確的資料庫結構相關聯。

  運行時,Hibernate讀取映射文檔,然後動態構建Java類,以便管理資料庫與Java之間的轉換。在Hibernate中有一個簡單而直觀的API,用於對資料庫所表示的對象執行查詢。要修改這些對象,(一般情況下)只需在程式中與它們進行互動,然後告訴Hibernate儲存修改即可。類似地,建立新對象也很簡單;只需以常規方式建立它們,然後告訴Hibernate有關它們的資訊,這樣就能在資料庫中儲存它們。

  Hibernate API學習起來很簡單,而且它與程式流的互動相當自然。在適當的位置調用它,就可以達成目的。它帶來了很多自動化和代碼節省方面的好處,所以花一點時間學習它是值得的。而且還可以獲得另一個好處,即代碼不用關心要使用的資料庫種類(否則的話甚至必須知道)。我所在的公司就曾有過在開發過程後期被迫更換資料庫廠商的經曆。這會造成巨大的災難,但是藉助於Hibernate,只需要簡單地修改Hibernate設定檔即可。

  這裡的討論假定您已經通過建立Hibernate映射文檔,建立了一個關聯式資料庫,並且擁有要映射的Java類。有一個Hibernate“工具集”可在編譯時間使用,以支援不同的工作流程。例如,如果您已經擁有Java類和映射文檔,Hibernate可以為您建立(或更新)必需的資料庫表。或者,僅僅從映射文檔開始,Hibernate也能夠產生資料類。或者,它可以反向設計您的資料庫和類,從而擬定映射文檔。還有一些用於Eclipse的alpha 外掛程式,它們可以在IDE中提供智能的編輯支援以及對這些工具的圖形訪問。

  如果您使用的是Hibernate 2環境,這些工具鮮有提供,但是存在可用的第三方工具。

  使用Hibernate的場合

  既然Hibernate看起來如此靈活好用,為什麼還要使用其他的工具呢?下面有一些情境,可以協助您做出判斷(或許通過提供一些比較和上下文,可以有助於鑒別非常適用Hibernate的場合)。

  如果應用對於資料存放區的需要十分簡單——例如,您只想管理一組使用者優先選擇——您根本不需要資料庫,更不用說一個優秀的對象-關係映射系統了(即使它也如Hibernate這般便於使用)!從Java 1.4開始,有一個標準的Java Preferences API可以很好地發揮這個作用。(在ONJava文章中可以找到有關Preferences API的更多資訊。)

  對於熟悉使用關聯式資料庫和瞭解如何執行完美的SQL查詢與企業資料庫互動的人來說,Hibernate似乎有些礙手礙腳,這就像帶有動力和自動排擋的快艇車會使注重效能的賽車駕駛員不耐煩一樣。如果您屬於這種人,如果您所在的項目團隊擁有一個強大的DBA,或者有一些預存程序要處理,您可能想研究一下iBATIS。Hibernate的建立者本身就把iBATIS當作是另一種有趣的選擇。我對它很有興趣,因為我們曾為一個電子商務網站開發了一個類似的系統(其功能更為強大),而且從那時到現在,我們已經在其他環境中使用過它,儘管在發現Hibernate之後,在新項目中我們通常更喜歡使用Hibernate。您可以認為,以SQL為中心的解決方案(比如iBATIS)是“反向的”對象/關係映射工具,而Hibernate是一個更為傳統的ORM。

  當然,還有其他的外部原因會導致採用另外的方法。比如,在一個企業環境中,必須使用成熟的EJB架構(或者其他的一些非普通對象映射系統)。可以為提供自己的資料存放區工具的平台量身定做代碼,比如Mac OS X's Core Data。使用的可能是像XML DTD這樣的儲存規範,而它根本不涉及關聯式資料庫。

  但是,如果您使用的是富物件模型,而且想要靈活、輕鬆且高效地儲存它(無論您是否正要開始或已經決定使用關聯式資料庫,只要這是一個選擇——而且存在可用的優秀免費資料庫,比如MySQL,或可嵌入Java的HSQLDB,它就應該始終是一個選擇),那麼Hibernate很可能就是您理想的選擇。您可能會驚訝於節省的時間之多,以及您將會多麼地喜歡使用它。

  其他資訊

  Hibernate項目有大量的線上文檔,可以協助您找准方向,快速開始使用。

  權威性的參考資料是Hibernate in Action,作者是Christian Bauer和Gavin King,都是Hibernate的建立者。該書全面而基礎地講述了Hibernate包的功能和正確的使用方法。

  閱讀我的書Hibernate: A Developer's Notebook,也是一種快速上手的好方法。它直接但詳細地講述了如何在Java項目中設定Hibernate,以及如何使用它的一些最重要的功能。其中的程式碼範例普遍基於Hibernate和HSQLDB的早期版本,所以如果您想不加改動地使用它們,需要使用這兩種軟體的正確版本。無論如何,基本的概念是正確的,而且我希望能夠儘快地針對Hibernate 3更新本書。

  另一本有趣的書是Better Faster Lighter Java,作者是Bruce Tate 和Justin Gehtland。書中給出了一些實用方法,可以以合理的方式完成實際的項目,這也是它流行的原因之一。它在如何評估和使用(或否決)可用的Java技術方面給出了合理建議,並作為正確方法的例子提到了Hibernate和Spring。

  最後,“Working with Hibernate in Eclipse”(它預先提到了更強大的新的alpha版的Hibernate 3工具)中詳細講述了如何將一個叫做Hibernate Synchronizer的Eclipse外掛程式與Hibernate一起使用。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。