1.hibernate的常用接口
(1) Configucation:負責加載Hibernate的配置及映射信息,啟動Hibernate,根據連接到數據庫的信息來創建SessionFactory
對象。
(2) SessionFactory: 初始化Hibernate,創建Session對象。他是線程安全的,通常采用單子模式創建此對象。
(3)Session :負責保存·修改·刪除·查詢·加載對象,這個session不是線程安全的,使用Threadlocal來得到session
(相當於創建了一個副本)。
(4)Transaction: 事務處理 開啟事務的方法 Transaction tx= session.beginTransaction(); 提交事務 tx.commit();
(5) Query和Criteria:Query是執行數據庫查詢,Query接口包裝了一個HQL語句,HQL語句是面向對象的,它引用類名
和屬性名,而不是表名和字段名。Criteria完全封裝了基於字符串形式的查詢語句,比Query接口更加面向對象,擅長
動態查詢。
2.hibernate體系結構
3.hibernate的工作原理
(1)hibernate如何連接數據庫?
配置文件Hibernate.cfg.xml文件中定義了和數據庫進行連接的信息,包括數據庫方言.jdbc驅動.用戶名.密碼和URL等。
Configuration 類借助dom4j的xml解析器進行xml的解析設置環境,然后使用這些環境屬性來生成sessionfactory。這樣
sessionfactory生成的session 就能夠成功獲得數據庫的連接。
(2)hibernate如何進行數據庫寫操作?
當保存一個pojo持久化對象時,觸發Hibernate保存事件監聽器進行處理。Hibernate通過映射文件獲得對象對應的數據庫
表名以及屬性對應的數據庫列名,然后通過反射機制獲得持久化對象的各個屬性,最終組織向數據庫插入新對象的SQL的
insert語句。調用session.save()保存數據后這個對象會被標識為持久化狀態放在session,當事物進行提交時才真正執行
insert語句。
(3)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語句查詢數
據庫。