好程式設計師Java教程分享Java面試題之Hibernate

好程式設計師IT發表於2019-10-18

好程式設計師Java 教程分享Java 面試題之 Hibernate

 

1. 簡書一下 Hibernated 的開發流程

 

         第一步:載入Hibernate 的配置檔案,讀取配置檔案的引數,

 

         第二步:建立SessionFactory 會話工廠(內部有連線池)

 

         第三步:開啟Session  連線

 

         第四步:開啟事務

 

         第五步:執行操作

 

         第六步:提交事務

 

         第七步:關閉session

 

         第八步:關閉連線池

 

2.Hibernate  中對物件的三種狀態

 

     瞬時狀態:不存在持久化標識的OID ,尚未與 HibernateSession 物件關聯,被認為處於瞬時狀態,失去引用將被 JVM 回收

 

     持久態:存在持久標識OID ,與當前 session 有關聯,並且相關聯 Session 沒有關閉,並且事務未提交

 

     遊離態:存在持久化標識OID, 但沒有與當前 Session 關聯,

 

 

 

3.Hibernate 的快取機制

 

    Hibernate 快取機制分為兩層, Hibernate 的一級快取和 Hibernate 二級快取。

 

    1.Hibernate 一級快取( Session 的快取)

 

Session  實現了第一級 Cache, 屬於事務級資料緩衝,一旦事務結束,快取隨之失效,一個 Session 的生命週期對應一個資料庫事務或一個程式事務。

 

        Session-Cache 總是被開啟並且不能被關閉的

 

Session-Cache  保證一個 Session 中兩次請求同一個物件時,取得的物件是一個 Java 例項,有時他可以避免資料不必要的衝突

 

Hibernate  二級快取( SessionFactory 的快取)

 

1 Hibernate  二級緩衝是 SessionFactory 範圍內的快取,所有的 Session 共享一個二級快取,在二級快取中儲存持久化例項

 

         的散裝形式的資料

 

2 )持久化不同的資料需要不同的 Cache  策略,比如一些因素影響 Cache 策略的選擇:資料的讀寫比例,資料表能否被其他的應用程式所訪問等。

 

     設定Hibernate  二級快取需要分兩步,首先,確認使用什麼資料併發策略,然後,配置快取期間時間並設定 Cache 提供器

 

    Hibernate 的查詢方式常見有三種: HQL,QBC( 命名查詢 ) ,以及使用原生 SQL 查詢

 

 

 

Hibernate JDBC 優缺點對比

 

     相同點:

 

            1 )兩者都是 java 資料庫操作的中介軟體

 

            2 )兩者對資料庫進行直接操作的物件時執行緒不安全的,都需及時關閉

 

            3 )兩者都可對資料庫的更新操作進行顯示的事務處理

 

         使用的SQL 語言不同: JDBC 使用是基於關係型資料庫的標準 SQL 語言。 HIbernate 使用是 HQL 語言

 

         操作的物件不同:JDBC 操作的是資料,將資料透過 SQL 語句直接傳送的資料庫中執行, Hibernate 操作的是持久化物件,有第吃了個持久化物件的資料更新到資料庫中

 

         資料狀態不同:JDBC 操作的資料時瞬時的,變數的值無法與資料庫中值保持一致,而 Hibernate 操作的資料時可持久化的,即持久化物件的資料屬性的值是可以跟資料庫中的值保持一致

 

 

 

     關於Hibernate orm 思想你瞭解多少?

 

    ORM 指的是物件關係型對映,指的就是我們透過建立實體類物件和資料庫中的表關係進行一一對應,來實現透過操作實體類物件來更改資料庫裡邊的資料資訊,這裡邊起到關鍵作用的是透過 HIbernate 的對映檔案 +Hibernate 的核心配置檔案

 

get load 的區別

 

    1.get 是立即載入, load 是延時載入

 

2.get 會先查一級快取,在查二級快取,然後查資料庫; load 會先查一級快取,如果沒找到,就建立代理物件,等需要的時候去查詢二級快取和資料庫,(這裡體現 load 的延遲載入的特性)

 

    3.get 如果沒有找到會返回 null,load 如果沒有找到會丟擲異常

 

4. 當我們使用 session.load 方法載入一個物件時,此時並不會發出 SQL 語句,當前得到得這個物件其實是一個代理物件。這個代理物件只儲存了實體物件的 id 值,只有當我們使用這個物件,得到其它屬性時,這個時候才會發出 SQL 語句,從資料庫中去查詢我們的對物件,相當於 load 的延遲載入方式。 get 就直接的多,當我們使用 Session.get ()方法來得到一個物件時,不管我們使不使用這個物件,此時都會發出 SQL 語句從資料庫中查詢出來

 

 

 

如何進行Hibernate  的最佳化

 

1. 資料庫設計調整。

 

2.HQL 最佳化

 

3.API 的正確使用

 

4. 主配置引數(日誌,查詢快取, fetch_sieze,batch_size .

 

5 。對映檔案最佳化( ID 生成策略,二級快取,延遲載入,關聯最佳化)

 

 6. 一級快取的管理

 

7. 針對二級快取,還有許多特有的策略

 

8. 事務控制策略

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2660516/,如需轉載,請註明出處,否則將追究法律責任。

相關文章