溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員Java教程分享Java面試題之Hibernate

發(fā)布時間:2020-07-06 02:36:46 來源:網(wǎng)絡 閱讀:114 作者:wx5da18b5c4b01e 欄目:編程語言

好程序員Java教程分享Java面試題之Hibernate

?

1.簡書一下Hibernated的開發(fā)流程

?

????????第一步:加載Hibernate的配置文件,讀取配置文件的參數(shù),

?

????????第二步:創(chuàng)建SessionFactory會話工廠(內(nèi)部有連接池)

?

????????第三步:打開Session?連接

?

????????第四步:開啟事務

?

????????第五步:運行操作

?

????????第六步:提交事務

?

????????第七步:關(guān)閉session

?

????????第八步:關(guān)閉連接池

?

2.Hibernate?中對對象的三種狀態(tài)

?

????瞬時狀態(tài):不存在持久化標識的OID,尚未與HibernateSession對象關(guān)聯(lián),被認為處于瞬時狀態(tài),失去引用將被JVM回收

?

????持久態(tài):存在持久標識OID,與當前session有關(guān)聯(lián),并且相關(guān)聯(lián)Session沒有關(guān)閉,并且事務未提交

?

????游離態(tài):存在持久化標識OID,但沒有與當前Session關(guān)聯(lián),

?

?

?

3.Hibernate的緩存機制

?

????Hibernate緩存機制分為兩層,Hibernate的一級緩存和Hibernate二級緩存。

?

????1.Hibernate一級緩存(Session的緩存)

?

Session?實現(xiàn)了第一級Cache,屬于事務級數(shù)據(jù)緩沖,一旦事務結(jié)束,緩存隨之失效,一個Session的生命周期對應一個數(shù)據(jù)庫事務或一個程序事務。

?

????????Session-Cache總是被打開并且不能被關(guān)閉的

?

Session-Cache?保證一個Session中兩次請求同一個對象時,取得的對象是一個Java實例,有時他可以避免數(shù)據(jù)不必要的沖突

?

Hibernate?二級緩存(SessionFactory的緩存)

?

1Hibernate?二級緩沖是SessionFactory范圍內(nèi)的緩存,所有的Session共享一個二級緩存,在二級緩存中保存持久化實例

?

????????的散裝形式的數(shù)據(jù)

?

2)持久化不同的數(shù)據(jù)需要不同的Cache?策略,比如一些因素影響Cache策略的選擇:數(shù)據(jù)的讀寫比例,數(shù)據(jù)表能否被其他的應用程序所訪問等。

?

????設置Hibernate?二級緩存需要分兩步,首先,確認使用什么數(shù)據(jù)并發(fā)策略,然后,配置緩存期間時間并設置Cache提供器

?

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

?

?

?

HibernateJDBC優(yōu)缺點對比

?

????相同點:

?

????????????1)兩者都是java數(shù)據(jù)庫操作的中間件

?

????????????2)兩者對數(shù)據(jù)庫進行直接操作的對象時線程不安全的,都需及時關(guān)閉

?

????????????3)兩者都可對數(shù)據(jù)庫的更新操作進行顯示的事務處理

?

????????使用的SQL語言不同:JDBC使用是基于關(guān)系型數(shù)據(jù)庫的標準SQL語言。HIbernate使用是HQL語言

?

????????操作的對象不同:JDBC操作的是數(shù)據(jù),將數(shù)據(jù)通過SQL語句直接發(fā)送的數(shù)據(jù)庫中執(zhí)行,Hibernate操作的是持久化對象,有第吃了個持久化對象的數(shù)據(jù)更新到數(shù)據(jù)庫中

?

????????數(shù)據(jù)狀態(tài)不同:JDBC操作的數(shù)據(jù)時瞬時的,變量的值無法與數(shù)據(jù)庫中值保持一致,而Hibernate操作的數(shù)據(jù)時可持久化的,即持久化對象的數(shù)據(jù)屬性的值是可以跟數(shù)據(jù)庫中的值保持一致

?

?

?

????關(guān)于Hibernateorm思想你了解多少?

?

????ORM指的是對象關(guān)系型映射,指的就是我們通過創(chuàng)建實體類對象和數(shù)據(jù)庫中的表關(guān)系進行一一對應,來實現(xiàn)通過操作實體類對象來更改數(shù)據(jù)庫里邊的數(shù)據(jù)信息,這里邊起到關(guān)鍵作用的是通過HIbernate的映射文件+Hibernate的核心配置文件

?

getload的區(qū)別

?

????1.get是立即加載,load是延時加載

?

2.get會先查一級緩存,在查二級緩存,然后查數(shù)據(jù)庫;load會先查一級緩存,如果沒找到,就創(chuàng)建代理對象,等需要的時候去查詢二級緩存和數(shù)據(jù)庫,(這里體現(xiàn)load的延遲加載的特性)

?

????3.get如果沒有找到會返回null,load如果沒有找到會拋出異常

?

4.當我們使用session.load方法加載一個對象時,此時并不會發(fā)出SQL語句,當前得到得這個對象其實是一個代理對象。這個代理對象只保存了實體對象的id值,只有當我們使用這個對象,得到其它屬性時,這個時候才會發(fā)出SQL語句,從數(shù)據(jù)庫中去查詢我們的對對象,相當于load的延遲加載方式。get就直接的多,當我們使用Session.get()方法來得到一個對象時,不管我們使不使用這個對象,此時都會發(fā)出SQL語句從數(shù)據(jù)庫中查詢出來

?

?

?

如何進行Hibernate?的優(yōu)化

?

1.數(shù)據(jù)庫設計調(diào)整。

?

2.HQL優(yōu)化

?

3.API的正確使用

?

4.主配置參數(shù)(日志,查詢緩存,fetch_sieze,batch_size.

?

5。映射文件優(yōu)化(ID生成策略,二級緩存,延遲加載,關(guān)聯(lián)優(yōu)化)

?

?6.一級緩存的管理

?

7.針對二級緩存,還有許多特有的策略

?

8.事務控制策略

?

?


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI