![](http://static.javashuo.com/static/loading.gif)
Hibernate工做原理程序員
Hibernate使用了J2EE架構中的以下技術:JDBC、JTA、JNDI。其中JDBC是一個支持關係數據庫操做的一個基礎層;它與JNDI和JTA一塊兒結合,使得Hibernate能夠方便地集成到J2EE應用服務器中去。web
在這裏,咱們不會詳細地去討論Hibernate API接口中的全部方法,咱們只簡要講一下每一個主要接口的功能,若是你想了解得更多的話,你能夠在Hibernate的源碼包中的net.sf.hibernate子包中去查看這些接口的源代碼。數據庫
下面咱們依次講一下全部的主要接口:編程
核心接口設計模式
如下5個核心接口幾乎在任何實際開發中都會用到。經過這些接口,你不只能夠存儲和得到持久對象,而且可以進行事務控制。安全
Session接口 Session接口對於Hibernate 開發人員來講是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,建立和銷燬它都不會佔用不少資源。這在實際項目中確實很重要,由於在客戶程序中,可能會不斷地建立以及銷燬Session對象,若是Session的開銷太大,會給系統帶來不良影響。服務器
SessionFactory 接口 這裏用到了一個設計模式――工廠模式,用戶程序從工廠類SessionFactory中取得Session的實例。 令你感到奇怪的是SessionFactory並非輕量級的!實際上它的設計者的意圖是讓它能在整個應用中共享。典型地來講,一個項目一般只須要一個SessionFactory就夠了,可是當你的項目要操做多個數據庫時,那你必須爲每一個數據庫指定一個SessionFactory。 SessionFactory在Hibernate中實際起到了一個緩衝區的做用,它緩衝了Hibernate自動生成的SQL語句和一些其它的映射數據,還緩衝了一些未來有可能重複利用的數據。架構
Configuration 接口 Configuration接口的做用是對Hibernate進行配置,以及對它進行啓動。在Hibernate的啓動過程當中,Configuration類的實例首先定位映射文檔的位置,讀取這些配置,而後建立一個SessionFactory對象。框架
Query和Criteria接口 Query接口讓你方便地對數據庫及持久對象進行查詢,它能夠有兩種表達方式:HQL語言或本地數據庫的SQL語句。Query常常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操做。 Criteria接口與Query接口很是相似,它容許你建立並執行面向對象的標準化查詢。 值得注意的是Query接口也是輕量級的,它不能在Session以外使用。ide
Callback 接口 當一些有用的事件發生時――例如持久對象的載入、存儲、刪除時,Callback接口會通知Hibernate去接收一個通知消息。通常而言,Callback接口在用戶程序中並非必須的,但你要在你的項目中建立審計日誌時,你可能會用到它。如下是它的策略接口:
*主鍵的生成 (IdentifierGenerator 接口)
*本地SQL語言支持 (Dialect 抽象類)
*緩衝機制 (Cache 和CacheProvider 接口)
*JDBC 鏈接管理 (ConnectionProvider接口)
*事務管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)
*ORM 策略 (ClassPersister 接口)
*屬性訪問策略 (PropertyAccessor 接口)
*代理對象的建立 (ProxyFactory接口)
Hibernate爲以上所列的機制分別建立了一個缺省的實現,所以若是你只是要加強它的某個策略的功能的話,只需簡單地繼承這個類就能夠了,沒有必要從頭開始寫代碼。
Hibernate運行在兩種環境下:可管理環境和不可管理環境
一、可管理環境:這種環境可管理以下資源:池資源管理,諸如數據庫鏈接池和,還有事務管理、安全定義。一些典型的J2EE服務器(JBoss、Weblogic、WebSphere)已經實現了這些。
二、不可管理環境:只是提供了一些基本的功能,諸如像Jetty或Tomcat這樣的servlet容器環境。
Hibernate的優缺點:
優勢:
Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架。Hibernate能夠用在任何JDBC可使用的場合,例如Java應用程序的數據庫訪問代碼,DAO接口的實現類,甚至能夠是BMP裏面的訪問數據庫的代碼。
Hibernate是一個和JDBC密切關聯的框架,因此Hibernate的兼容性和JDBC驅動,和數據庫都有必定的關係,可是和使用它的Java程序,和App Server沒有任何關係,也不存在兼容性問題。
Hibernate不能用來直接和Entity Bean作對比,只有放在整個J2EE項目的框架中才能比較。而且即便是放在軟件總體框架中來看,Hibernate也是作爲JDBC的替代者出現的,而不是Entity Bean的替代者出現的,
Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。
Hibernate能夠應用在任何使用JDBC的場合。
Hibernate 使用 Java 反射機制 而不是字節碼加強程序來實現透明性。
Hibernate 的性能很是好,由於它是個輕量級框架。 映射的靈活性很出色。
它支持各類關係數據庫,從一對一到多對多的各類複雜關係。
缺點:
它限制您所使用的對象模型。(例如,一個持久性類不能映射到多個表)。
讓我再列一次我已經列n次的框架結構:
傳統的架構:1、Session BeanEntity BeanDB
爲了解決性能障礙的替代架構:2、Session BeanDAOJDBCDB
使用Hibernate來提升上面架構的開發效率的架構:3、Session BeanDAOHibernateDB
以上就是e良師益友爲你們詳細講解的三大框架中Hibernate的原理及其優缺點!