10 00Hibernate之Hibernate簡介

Hibernate中文翻譯爲“冬眠”,在開發上Hibernate的主要功能是進行數據層的操作實現。疑問?數據層的開發不應該使用JDBC嗎?那麼爲什麼又會產生一個Hibernate呢?

1 傳統開發的弊病

在任何一個項目的開發之中,一定需要存在有四個層:
(1)顯示層:
|————動態語言:JSP,如果要想合理的實現需要編寫一堆的Scriptlet代碼,而後利用了EL+JSTL解決了;
|————靜態語言:HTML、JavaScript:可以完成所有的開發,但是DOM的難度太高了,使用JQuery解決;
(2)控制層:核心應用在於數據驗證、業務調用、分發處理,利用Struts可以解決控制層的問題;
(3)業務層:事務控制、數據層調用;
(4)數據層:數據層裏面只能夠編寫JDBC代碼,但是JDBC寫了半天,發現太重複了;
那麼如果說現在有一個工具可以幫助你自動的根據指定的原則動態配置SQL,動態執行SQL,那麼這樣的數據層開發就應該很舒服了。那麼這個時候我們的處理方式只能夠想到反射,但是同時帶來的問題是,難道太高了。

另外一點,在開發之中,用可能會根據客戶的使用習慣選擇並配置不同的數據庫。但是如果按照傳統的開發,代碼問題很多,至少每一個數據庫支持的SQL語句形式不同,就拿一個最簡單的分頁操作:
(1)Oracle、DB:ROWNUM;
(2)MySQL:LIMIT;
(3)SQL Server:TOP。

這個時候聰明的開發者想出一個“非常合理“的解決之道,他利用了更加合理的類的設計方式來解決了此類問題,他的方案就是——接口匹配標準,標準可以隨意實現。

答案是:這是一個最爲合理的解決問題方式。但是他可能又面臨新的問題,如果說某一個項目上可能支持一百種數據庫,那麼意味着一個數據庫連接類或者是數據層實現子類,就要定義多達100種的子類。即便很多,那麼也可以找一羣人進行項目的開發,但是最可怕的是,有一天,你的數據庫結構全變了。整個的設計就將變爲一頭餓狼。

但是雖然可能要編寫100個子類,那麼實際上也可以利用反射機制的存在,幫助我們減少一部分重複代碼。可是進行反射開發,又有多少人可以寫出來?

傳統的開發:使用的結構固定,不易於擴展操作,同時編寫的代碼重複,設計困難。這些都屬於JDBC直接開發的完全弊病。

2 解決數據層的問題

正如狼人害怕銀彈一樣,在軟件行業的開發之中,有不少的人開始去尋找這顆銀彈。後來出現了這樣的一種解決方案。

如果現在要進行數據庫的開發,那麼一定要使用的只能夠是JDBC,但是如果直接使用JDBC其結果就是:代碼重複、設計性差,那麼可以想辦法針對於JDBC的操作做一個裝飾,讓其變得可以更加容易一些。

也就是說解決問題的關鍵就在於數據層不要直接與JDBC耦合。數據層不應該關心JDBC的存在,中間的工具類幫助用戶關心JDBC。

隨着開發歷史的加長,出現了許多的數據層工具類。
1、JDO(Java Data Object,Java數據對象):是最早的提供數據庫操作的工具類,但是這個工具類也只是簡單的利用了反射進行了操作的自動生成而已,支持的操作很有限,現在已經不再使用了。

2、EJB 2.x Entity Bean(實體企業JavaBean):是真正的第一款官方提供的“ORMapping”框架(Object-Relation Mapping,對象關係映射),在EJB上真正實現了數據庫間的完全可移植性。可以最早的EJB 2.x不支持分頁,所有的數據庫的數據如果加載到內存,就一直保存着,於是造成一個最大的問題——沒人用得起。
(1)它來到了世間,給世界留下了寶貴的財富——理論價值,EJB使用了實體對象(簡單Java類)直接進行操作,調用類中的setter()方法時會自動地進行數據庫得更新操作,同時第一次官方強調了數據層的開發標準,用戶完全不需要知道JDBC得存在,操作對象的時候就自動進行數據庫操作。

3、Hibernate框架:是真正的第一款在世界流行的實體層開發框架,在EJB 2.x的完美薰陶下,解決了EJB 2.x中的種種性能問題以及使用侷限(EJB必須要求有EJB容器支持,而Hibernate只需要WEB),很多的大型項目都使用Hibernate進行開發,並且一直延續到今天,可是它的問題只有一個:Hibernate起源於EJB技術,所以其性能的處理上不高(考慮太多了)。

4、EJB 3.x:此技術解決了之前所有EJB的缺點,並且加強了優點,但是缺點依然需要EJB容器的支持,所以也沒人使用了,EJB 3.x的設計者就是Hibernate的設計者;

5、MyBatis(前身:IBatis):EJB和Hibernate考慮了數據庫的可移植性,封裝了所有可能見到的數據庫操作,但是大部分情況下,我們可能需要的只是一個簡單的框架(自動設置內容、數據轉型,並且不需要數據庫可移植性);

以上的技術都屬於ORMapping技術,但是千萬要記住一點:JDBC也是一個ORMapping的開發框架,ORMapping的特點:對象的改變可以引起數據庫的變化(隨着發展,也不這麼明顯了)。

Hibernate可以解決的是數據層的開發問題以及數據庫的可移植性操作問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章