1、為什么要使用 hibernate?
hibernate 是對 jdbc 的封裝,大大簡化了資料訪問層的繁瑣的重復性代碼,
hibernate 是一個優秀的 ORM 實作,很多程度上簡化了 DAO 層的編碼功能,
可以很方便的進行資料庫的移植作業,
提供了快取機制,是程式執行更改的高效,
2、什么是 ORM 框架?
ORM(Object Relation Mapping)物件關系映射,是把資料庫中的關系資料映射成為程式中的物件,
使用 ORM 的優點:提高了開發效率降低了開發成本、開發更簡單更物件化、可移植更強,
3、hibernate 中如何在控制臺查看列印的 SQL 陳述句?
在 Config 里面把 hibernate. show_SQL 設定為 true 就可以,但不建議開啟,開啟之后會降低程式的運行效率,
4、hibernate 有幾種查詢方式?
三種:hql、原生 SQL、條件查詢 Criteria,
5、hibernate 物體類可以被定義為 final 嗎?
物體類可以定義為 final 類,但這樣的話就不能使用 hibernate 代理模式下的延遲關聯提供性能了,所以不建議定義物體類為 final,
6、在 hibernate 中使用 Integer 和 int 做映射有什么區別?
Integer 型別為物件,它的值允許為 null,而 int 屬于基礎資料型別,值不能為 null,
7、 hibernate 是如何作業的?
讀取并決議組態檔,
讀取并決議映射檔案,創建 SessionFactory,
打開 Session,
創建事務,
進行持久化操作,
提交事務,
關閉 Session,
關閉 SessionFactory,
8、get()和 load()的區別?
資料查詢時,沒有 OID 指定的物件,get() 回傳 null;load() 回傳一個代理物件,
load()支持延遲加載;get() 不支持延遲加載,
9、說一下 hibernate 的快取機制?
hibernate 常用的快取有一級快取和二級快取:
一級快取:也叫 Session 快取,只在 Session 作用范圍內有效,不需要用戶干涉,由 hibernate 自身維護,可以通過:evict(object)清除 object 的快取;clear()清除一級快取中的所有快取;flush()刷出快取;
二級快取:應用級別的快取,在所有 Session 中都有效,支持配置第三方的快取,如:EhCache,
10、hibernate 物件有哪些狀態?
臨時/瞬時狀態:直接 new 出來的物件,該物件還沒被持久化(沒保存在資料庫中),不受 Session 管理,
持久化狀態:當呼叫 Session 的 save/saveOrupdate/get/load/list 等方法的時候,物件就是持久化狀態,
游離狀態:Session 關閉之后物件就是游離狀態,
11、在 hibernate 中 getCurrentSession 和 openSession 的區別是什么?
getCurrentSession 會系結當前執行緒,而 openSession 則不會,
getCurrentSession 事務是 Spring 控制的,并且不需要手動關閉,而 openSession 需要我們自己手動開啟和提交事務,
12、hibernate 物體類必須要有無參建構式嗎?為什么?
hibernate 中每個物體類必須提供一個無參建構式,因為 hibernate 框架要使用 reflection api,通過呼叫 ClassnewInstance() 來創建物體類的實體,如果沒有無參的 建構式就會拋出例外,在黑夜里夢想著光,心中覆寫悲傷,在悲傷里忍受孤獨,空守一絲溫暖, 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在, 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/445913.html
標籤:其他
下一篇:【面經】Spring常見問題
