Hibernate的工作方式:
Hibernate不會對您造成妨礙,也不會強迫您修改對象的行為方式。它們不需要實現(xiàn)任何不可思議的接口以便能夠持續(xù)存在。惟一需要做的就是創(chuàng)建一份 XML“映射文檔”,告訴Hibernate您希望能夠保存在數(shù)據(jù)庫中的類,以及它們?nèi)绾侮P(guān)聯(lián)到該數(shù)據(jù)庫中的表和列,然后就可以要求它以對象的形式獲取數(shù)據(jù),或者把對象保存為數(shù)據(jù)。與其他解決方案相比,它幾乎已經(jīng)很完美了。
由于本文只是一篇介紹性的文章,所以不會引入構(gòu)建和使用Hibernate映射文檔的具體例子(我在《Hibernate: A Developer's Notebook》一書的頭幾章中已經(jīng)介紹了一個例子)。此外,在網(wǎng)上和Hibernate的在線文檔中,還可以找到一些不錯的例子,請參見下面的“其他信息”部分。它實際上相當直觀。應(yīng)用程序?qū)ο笾械膶傩砸砸环N簡單而自然的方式與正確的數(shù)據(jù)庫結(jié)構(gòu)相關(guān)聯(lián)。
運行時,Hibernate讀取映射文檔,然后動態(tài)構(gòu)建Java類,以便管理數(shù)據(jù)庫與Java之間的轉(zhuǎn)換。在 Hibernate中有一個簡單而直觀的API,用于對數(shù)據(jù)庫所表示的對象執(zhí)行查詢。要修改這些對象,(一般情況下)只需在程序中與它們進行交互,然后告訴Hibernate保存修改即可。類似地,創(chuàng)建新對象也很簡單;只需以常規(guī)方式創(chuàng)建它們,然后告訴Hibernate有關(guān)它們的信息,這樣就能在數(shù)據(jù)庫中保存它們。
Hibernate API學(xué)習(xí)起來很簡單,而且它與程序流的交互相當自然。在適當?shù)奈恢谜{(diào)用它,就可以達成目的。它帶來了很多自動化和代碼節(jié)省方面的好處,所以花一點時間學(xué)習(xí)它是值得的。而且還可以獲得另一個好處,即代碼不用關(guān)心要使用的數(shù)據(jù)庫種類(否則的話甚至必須知道)。我所在的公司就曾有過在開發(fā)過程后期被迫更換數(shù)據(jù)庫廠商的經(jīng)歷。這會造成巨大的災(zāi)難,但是借助于Hibernate,只需要簡單地修改Hibernate配置文件即可。
這里的討論假定您已經(jīng)通過創(chuàng)建Hibernate映射文檔,建立了一個關(guān)系數(shù)據(jù)庫,并且擁有要映射的Java 類。有一個Hibernate“工具集”可在編譯時使用,以支持不同的工作流。例如,如果您已經(jīng)擁有Java類和映射文檔,Hibernate可以為您創(chuàng)建(或更新)必需的數(shù)據(jù)庫表;蛘撸瑑H僅從映射文檔開始,Hibernate也能夠生成數(shù)據(jù)類。或者,它可以反向設(shè)計您的數(shù)據(jù)庫和類,從而擬定映射文檔。還有一些用于Eclipse的alpha 插件,它們可以在IDE中提供智能的編輯支持以及對這些工具的圖形訪問。
使用Hibernate的場合
既然Hibernate看起來如此靈活好用,為什么還要使用其他的工具呢?下面有一些場景,可以幫助您做出判斷(或許通過提供一些比較和上下文,可以有助于鑒別非常適用Hibernate的場合)。
如果應(yīng)用對于數(shù)據(jù)存儲的需要十分簡單——例如,您只想管理一組用戶優(yōu)先選擇——您根本不需要數(shù)據(jù)庫,更不用說一個優(yōu)秀的對象-關(guān)系映射系統(tǒng)了(即使它也如Hibernate這般易于使用)!從Java 1.4開始,有一個標準的Java Preferences API可以很好地發(fā)揮這個作用。
對于熟悉使用關(guān)系數(shù)據(jù)庫和了解如何執(zhí)行完美的SQL查詢與企業(yè)數(shù)據(jù)庫交互的人來說,Hibernate似乎有些礙手礙腳,這就像帶有動力和自動排擋的快艇車會使注重性能的賽車駕駛員不耐煩一樣。如果您屬于這種人,如果您所在的項目團隊擁有一個強大的DBA,或者有一些存儲過程要處理,您可能想研究一下iBATIS。Hibernate的創(chuàng)建者本身就把iBATIS當作是另一種有趣的選擇。我對它很有興趣,因為我們曾為一個電子商務(wù)站點開發(fā)了一個類似的系統(tǒng)(其功能更為強大),而且從那時到現(xiàn)在,我們已經(jīng)在其他環(huán)境中使用過它,盡管在發(fā)現(xiàn)Hibernate之后,在新項目中我們通常更喜歡使用Hibernate。您可以認為,以SQL為中心的解決方案(比如iBATIS)是“反向的”對象/關(guān)系映射工具,而 Hibernate是一個更為傳統(tǒng)的ORM。
當然,還有其他的外部原因會導(dǎo)致采用另外的方法。比如,在一個企業(yè)環(huán)境中,必須使用成熟的EJB架構(gòu)(或者其他的一些非普通對象映射系統(tǒng))?梢詾樘峁┳约旱臄(shù)據(jù)存儲工具的平臺量身定做代碼,比如Mac OS X's Core Data。使用的可能是像XML DTD這樣的存儲規(guī)范,而它根本不涉及關(guān)系數(shù)據(jù)庫。
但是,如果您使用的是富對象模型,而且想要靈活、輕松且高效地保存它(無論您是否正要開始或已經(jīng)決定使用關(guān)系數(shù)據(jù)庫,只要這是一個選擇——而且存在可用的優(yōu)秀免費數(shù)據(jù)庫,比如MySQL,或可嵌入Java的HSQLDB,它就應(yīng)該始終是一個選擇),那么 Hibernate很可能就是您理想的選擇。您可能會驚訝于節(jié)省的時間之多,以及您將會多么地喜歡使用它。
Swing
圖形用戶接口(GUI)庫最初的設(shè)計目的是讓程序員構(gòu)建一個通用的GUI,使其在所有的平臺上都能夠正常的顯示。但是比較遺憾的是AWT產(chǎn)生的是在各系統(tǒng)看來都同樣欠佳的圖形用戶接口,JAVA1.2為老的java1.0 AWT添加了Java基礎(chǔ)類(JFC),這是一個被稱為“Swing”的GUI的一部分。Swing是第二代GUI開發(fā)工具集,AWT采用了與特定平臺相關(guān)的實現(xiàn),而絕大部分Swing組件卻不是。Swing是構(gòu)筑在AWT上層的一組GUI組件的集合,為了保證可移植性,它完全用Java語言編寫,與AWT相比,Swing提供了更完整的組件,引入了許多新的特性和能力。Swing提供了更多的組件庫,如:JTable,JTree,Jcombox。Swing也增強了AWT中組件的功能。正是因為Swing具備了如此多的優(yōu)勢所以我們以后在開發(fā)中都使用Swing。JComponent類是Swing組件的基類,而JComponent繼承自Container類,因此,所有的Swing組件都是AWT的容器。Swing采用了MVC設(shè)計模式。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |