国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

漫談Hibernate的前世今生

2019-11-18 15:38:45
字體:
來源:轉載
供稿:網友

  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的場合)。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 塘沽区| 甘谷县| 兴和县| 郯城县| 吕梁市| 鄯善县| 石首市| 延长县| 乌海市| 河东区| 宝应县| 双鸭山市| 襄汾县| 南江县| 冷水江市| 安泽县| 渭南市| 三明市| 张北县| 特克斯县| 宜丰县| 澄迈县| 墨脱县| 漠河县| 滨州市| 奈曼旗| 东乌珠穆沁旗| 黎川县| 精河县| 栾城县| 湟源县| 蓝田县| 高唐县| 阿克| 辉县市| 双流县| 华阴市| 临桂县| 米林县| 米林县| 秭归县|