您好,登錄后才能下訂單哦!
好程序員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.事務控制策略
?
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。