Hibernate筆記=>前言
Mapping(ORM),在沒有ORM的時候,開發者需要自己開發對象到數據庫的映射工作,一般來說在Java世界中是通過JDBC來實現,在.Net世界是通過ADO.net來實現,眾所周知這一項任務是繁瑣耗時的,因為要在代碼中內置大量的SQL語句,這使得代碼的可讀性和可維護性大大降低。現在,Hibernate可以為我們來做這項工作,我們只需要配置一個Mapping文件即可,剩下的所有事情就交給Hibernate吧,這樣可以節省對象持久化相關的至少30%的JDBC/ADO.net編程工作量,這是多么的令人興奮阿。
這種結構中,業務邏輯層不僅負責業務邏輯,而且直接訪問數據庫,提供對業務數據的增、刪、改、查的操作。為了把數據訪問的細節和業務邏輯分開,可以把數據訪問作為單獨的持久化層。重新分層后自上而下變為:
這樣持久化層封裝數據訪問細節,為業務邏輯提供面向對象的API。一個完善的持久化層應該達到以下幾個目標:
正因為這幾個目標的艱巨,在企業級開發中花費大量的時間,采用高級相關技術工程師去重頭開發自己的持久層不是很可行的,Hibernate作為持久層中間件,它的具體實現對上層是透明的,開發者無需關系它的具體實現,只需要知道如何訪問他的接口就行了。
Mapping)是對象-關系映射,當下流行的開發語言都是面向對象的,如Java,C#。而當下流行的DB大多都是面向關系的,也就是關系數據庫。這樣在面向對象與面向關系之間需要一個橋梁,才能使二者協同無縫聯合工作,ORM就是這個橋梁。映射關系如下:
[對象實例]<=>[表的行]
那么這些映射關系是如何制定的呢?——只需要一個映射文件(XML)即可,在其中配置持久化類與DB表的映射關系后,ORM中間件在運行時參照此文件內容,對象持久化的DB中或把DB中數據加載到持久化類中。
要把類的屬性與DB表的Field對應,ORM就必須能識別類的屬性名字和數值。這就必須才用反射(Reflection)技術,相信有一定開發經驗的人對此技術都是耳熟能詳了吧,當前主流開發語言都支持此技術,如Java和.net,而且具體用法都如出一轍。當然對于那些只想使用ORM而不關心ORM的具體實現的朋友,這些內容不了解也沒有任何影響。這也恰恰是ORM的好處啊。
當配置為自動決定何時把對象數據寫入DB的模式下,Hibernate采用了一個自動識別對象屬性變化的技術。即Hibernate知道持久化類哪些屬性發生了變化,然后據此來決定后便的操作。關于此技術更具體的內容,以后再詳述。
從內存中獲取數據要比從DB中獲取數據快得多,所以很多ORM都采用緩存結束來提高持久化效率,Hibernate也不例外。在Session中保留所有已經持久化的對象實例作為緩存,如果需要獲取的數據在緩存中存在,則不去DB中加載。當然緩存中數據與DB中數據的一致性問題,Hibernate就是通過剛剛說過的[識別對象屬性變化]的技術來實現的。
Language)是Hibernate自己的查詢語句,它與SQL相似,但是HQL是面向對象的,它引用類名及類的屬性名,而不是表名及表的字段名。
好了,通過以上這些,基本可以了解Hibernate是什么了,可以開始了解Hibernate的核心接口了,Let's Go...