### Hibernate引出
曾學過三層架構,三層分別為界面層、業務邏輯層、數據持久層。在javaweb中,界面層和業務邏輯層可以使用struts框架來封裝一些常用的操作。而在我們的數據持久層中,對數據庫的增刪改查,我們經常要手動的控制事務,各種sql語句查詢,各種參數傳遞,無論是對哪個表操作使用的均是同一種思路進行操作的。既然是同一種思路,那就是重復的東西了。而且我們還要和關系型數據庫打交道,而不單單的是對象。而hibernate框架對此作了完美的封裝。
### Hibernate簡介
hibernate是一個基于java的對象/關系數據庫映射工具,它將對象模型表示的數據映射到SQL表示的關系模型上去。Hibernate管理java到數據庫的映射,提供給了數據查詢和存取的方法,減少了程序員對數據持久化層相關的編程任務。
### 持久化與ORM
什么是持久化?是把數據保存到數據庫或者某些存儲設備中。在三層架構中,持久化是和數據庫打交道的層次。在jsp的web開發中,經常有許多數據庫連接、刪除、查詢等操作,在數據庫相關工作中通過jdbc過于繁瑣,就催生出了ORM(Object-RelationMapping),ORM作用是在關系數據庫和對象之間做一個自動映射,這樣在操作數據庫時不需要使用復雜的sql語句,只要操作對象即可,ORM工具會自動將對象轉換為sql語句操作。這樣就只需要關注業務邏輯中的對象結構,而不用關心底層復雜的sql和jdbc代碼。而Hibernate框架是ORM工具的一種,是關系/對象映射的解決方案(如圖1.1)。

圖1.1
### Hibernate詳細架構
Hibernate高層架構圖和詳細架構圖如下圖所示(圖1.2和圖1.3)。

圖1.2高層架構圖

圖1.3詳細架構圖
一些介紹。
(1)??會話工廠(SessionFactory)
會話工廠是對屬于單一數據庫的映射文件的線程安全的、不可變的緩存快照。它是會話的工廠類,可能持有一個可選的(二級)數據庫緩存,可以在進程級別或集群級別保存可以在事務中重用的數據。
(2)??會話(Session)
對于Session我們是那么的熟悉,在javaweb開發中session可以用來保存用戶會話過程中狀態信息。而hibernate中的session是對象與數據庫會話持久化管理器。
會話是單線程、聲明短暫的對象,代表應用和持久化層之間的一次對話,封裝了JDBC連接,事務的工程。保存必需持久化對象緩存,用于遍歷對象圖,或者表示查找對象。
(3)??持久化對象(PersistentObjects)和集合(Collection)
持久化對象是生命周期短暫的單線程對象,包含了持久化狀態,他們從屬于且僅從屬于一個session。
(4)??臨時對象(TransientObjects)和集合(Collection)
沒有從屬于一個session的持久化類的實例。它們可能是剛被程序實例化,還沒來得及持久化的對象,或者是一個已經被關閉的Session所是實例化。
(5)??事務(Transaction)
單線程,應用程序用它表示一批不可分割操作。一個session在某些情況下可能跨越多個事務。
(6)??連接提供者(ConnectionProvider)
JDBC連接工廠和池,從底層的Datasource或者DriverManager抽象而來。對應用程序不可見,但是可以被開發擴展或實現。
(7)??事務工廠(TransationFactory)
事務實例的工廠,對應用程序不可見,但可以被開發者擴展或實現。
### Hibernate優點和缺點
優點:Hibernate持久層與數據庫打交道的橋梁,徹底封裝了JDBC,隱藏了更多的細節,有很好的移植性。JDBC語句繁瑣,賦值執行我們不用再寫相關代碼,提高了效率,同時hibernate是一個輕量級框架(不依賴于別的運行),沒有侵入性,測試簡單,提高了生產力。
缺點:封裝的太徹底導致不靈活,是用數據特定的東西比較不容易。對大量數據庫的更新有問題,當程序大量查詢統計,或批量更新無法使用數據庫特性機制,例如存儲過程等。
下一篇[Hibernate示例](http://blog.csdn.net/lovesummerforever/article/details/19170795)。
?
- 前言
- Struts旅程(一)Struts簡介和原理
- struts旅程(二)Struts登錄示例
- Struts旅程(三)Struts表單處理器ActionForm(靜態動態)
- Struts旅程(四)MVC向struts MVC框架演變過程
- Struts旅程(五)struts控制器DispatchAction
- Struts旅程(六)Struts頁面轉發控制ActionForward和ActionMapping
- Hibernate旅程(一)Hibernate架構概述
- Hibernate旅程(二)Hibernate實例
- Hibernate旅程(三)Hibernate持久化對象的三個狀態
- Hibernate旅程(四)Hibernate對數據庫刪除、查找、更新操作
- Hibernate旅程(五)Hibernate映射--基本類映射和對象關系映射
- Hibernate旅程(六)Hibernate映射--繼承映射
- Hibernate旅程(七)Hibernate緩存機制--一級緩存
- Hibernate旅程(八)Hibernate緩存機制--二級緩存
- Hibernate旅程(九)Hibernate緩存機制--查詢緩存
- Spring旅程(一)為什么使用Spring
- Spring旅程(二)非Spring向Spring過渡-- Spring IOC容器的使用
- Spring旅程(三) AOP--Spring AOP容器基礎
- Spring旅程(四) AOP--Spring AOP實例
- SSH旅程(五)Spring運用到Hibernate中
- SSH旅程(六)Spring和struts結合(方案一)