好程式設計師Java教程分享Java面試題之Hibernate
好程式設計師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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- 好程式設計師Java教程分享XML常見面試題程式設計師JavaXML面試題
- 好程式設計師Java教程分享jsp相關面試題程式設計師JavaJS面試題
- 好程式設計師Java教程分享Java面試常見技術難題程式設計師Java面試
- 好程式設計師Java教程分享JavaScript常見面試題一程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題五程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題三程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題二程式設計師JavaScript面試題
- 好程式設計師Java培訓分享Java面試題之Java集合篇三程式設計師Java面試題
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師Java教程分享Java多執行緒常見面試題程式設計師Java執行緒面試題
- 好程式設計師Java分享Javamain十個面試題程式設計師JavaAI面試題
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 好程式設計師Java教程分享Java實習生面試題集錦程式設計師Java面試題
- 好程式設計師Java教程分享面試中Spring的技術問題程式設計師Java面試Spring
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享Java面試題集合篇二程式設計師Java面試題
- 好程式設計師Java培訓分享Java中級面試題合集程式設計師Java面試題
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- JAVA程式設計師面試題庫分享Java程式設計師面試題
- 好程式設計師Java學習路線分享Java面試題之載入機制程式設計師Java面試題
- 好程式設計師Java教程分享Java語法程式設計師Java
- 好程式設計師Java教程分享Jmeter效能測試程式設計師JavaJMeter
- 好程式設計師Java教程之ZooKeeper面試題梳理彙總程式設計師Java面試題
- 好程式設計師Java教程之Java面試寶典Java IO篇程式設計師Java面試
- 好程式設計師Java教程分享Java難點解析之泛型程式設計師Java泛型
- 好程式設計師web前端教程分享JavaScript面試題程式設計師Web前端JavaScript面試題
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師Java教程分享Vue外掛之Axios程式設計師JavaVueiOS
- 好程式設計師Java培訓分享22道Spring Boot面試題!程式設計師JavaSpring Boot面試題
- 好程式設計師分享Java面試題:ListIterator和Iterator的異同程式設計師Java面試題
- 好程式設計師Java教程分享Java之包裝類與常用類程式設計師Java