Hibernate工作原理

工作原理圖:



1.Hibernate是如何連接數據庫 

主要是通過hibernate.cfg.xml配置文件中的配置  

      在這個文件中定義了數據庫進行連接所需要的信息,包括JDBC驅動、用戶名、密碼、數據庫方言等configuration類藉助dom4j的XML解析器解析設置環境,然後使用這些環境屬性來生成 SessionFactory。這樣這個sessionFactory生成的session就能成功獲得數據庫的連接。


2.Hibernate是如何進行數據庫寫操作  
     
    對數據庫的寫操作包括保存、更新和刪除,當保存一個POJO持久對象時,觸發Hibernate的保存事件監聽器進行處理。Hibernate通過映射文件獲得對象對應數據庫表名以及屬性所對應的表中的列名,然後通過反射機制持久化對象(實體對象)的各個屬性,最終組織成向數據庫插入新對象的SQL insert語句。調用了session.save()方法後,這個對象會標識成持久化狀態存放在session中,對於Hibernate來說它就是一個持久化了的對象,但這個時候Hibernate還不會真正的執行insert語句,當進行session的刷新同部或事務提交時,Hibernate會把session緩存中的所有SQL語句一起執行,對於更新、刪除操作也是採用類似的機制。

    然後,提交事務並事務提交成功後,這些寫操作就會被永久地保存進數據庫中,所以,使用session對數據庫操作還依賴於Hibernate事務的處理。如果設置了二級緩存,那麼這些操作會被同步到二級緩存中,Hibernate對數據庫最終操作也是依賴於底層JDBC對數據庫進行。  
     

3.Hibernate 如何從數據庫中載入對象  
     
    當使用session.load()載入對象時,可以設置是否採用延遲加載,如果延遲加載,那麼load返回的對象實際是CGLIB或javassist返回的代理類,它的非主鍵屬性都是空的,這對於對象集合屬性很有效。 Hibernate以此來節約內存,當真正需要讀取對象時,Hibernate會先嚐試從session緩存中讀取,如果session緩存中數據不存在或者是髒數據並且配置了二級緩存,Hibernate嘗試從二級緩存中檢索數據,否則Hibernate會根據對象類型,主鍵等信息組織select語句到數據中讀取,再把select結果組織成對象返回。  
   
4.Hibernate如何進行數據庫查詢操作  

    Hibernate提供SQL HQL Criteria查詢方式。HQL是其中運用最廣泛的查詢方式。用戶使用session.createQuery()方法以一條HQL語句爲參數創建 Query查詢對象後,Hibernate會使用Anltr庫把HQL語句
解析成JDBC可以識別的SQL語句,如果設置了查詢緩存,那麼執行 Query.list()時,Hibernate會先對查詢緩存
進行查詢,如果查詢緩存不存在,再使用select語句查詢數據庫。

發佈了37 篇原創文章 · 獲贊 39 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章