【Java面試題】Hibernate
50)簡述一下 hibernate 的開發流程
第一步:載入 hibernate 的配置檔案,讀取配置檔案的引數(jdbc 連線引數,資料 庫方言,hbm 表與物件關係對映檔案) 第二步:建立 SessionFactory 會話工廠(內部有連線池) 第三步:開啟 session 獲取連線,構造 session 物件(一次會話維持一個數據連線, 也是一級快取) 第四步:開啟事務 第五步:進行操作 第六步:提交事務 第七步:關閉 session(會話)將連線釋放第八步:關閉連線池
51)Hibernate 和 JDBC 對比
共同點:1.Java資料庫操作中介軟體,執行緒不安全,顯式事務處理。
不同點:
-
JDBC 是 SUN 公司提供一套操作資料庫的規範,而Hibernate 是一個基於 jdbc 的主流持久化框架,對 JDBC 訪問資料庫的程式碼做了封裝。
-
使用的SQL語言不同:JDBC 使用的是基於關係型資料庫的標準 SQL 語言,Hibernate 使用的是 HQL(Hibernate query language)語言。
-
操作的物件不同:JDBC 操作的是資料,將資料通過 SQL 語句直接傳送到資料庫中執行,Hibernate 操作的是持久化物件,由底層持久化物件的資料更新到資料庫中。
-
資料狀態不同:
-
JDBC 操作的資料是“瞬時”的,變數的值無法與資料庫中的值保持一致, 而 Hibernate 操作的資料是可持久的,即持久化物件的資料屬性的值是可以跟資料庫中的值保持一致的。
52)說說 hibernate 的三種狀態之間如何轉換?
hibernate 的三種狀態是瞬時狀態、持久狀態、託管狀態:
比如有一個 User 實體類和一張 User 表。當 new 了一個 user 物件,但沒有開啟事務。此時 user就處於瞬時狀態,與資料庫的資料沒有任何聯絡,
當開啟事務後,執行了 session.save()方法後,session 快取中存放了該 user 物件,而資料庫中也有相應的這條資料,此時就轉換為持久狀態。
當事務提交後,session 被銷燬。session 快取中就沒有 user 物件,而資料庫表中有相應記錄,此時為託管狀態。
53)如何搭建一個 Hibernate 的環境
先匯入 jar 包與配置檔案、hibernate 啟動 session 的工具類。
在配置檔案中配置資料庫的基本資訊與資料庫方言
進行測試,先建立實體類和資料庫中的表。建立對映檔案,命名規則是 實體類名.hbm.xml。位置要與實體類同一包下。在對映檔案中配置 實體類與資料庫表之間的對映關係。在hibernate.cfg.xml 配置檔案中新增對映檔案的路徑。
通過 hibernate 的工具類建立 sessionfactory,通過工廠建立 session 物件,通過 session 開啟事務, 進行資料操作後,事務提交。