Hibernate

Hibernate

1.爲何使用Hibernate?

Hibernate是對jdbc的封裝,大大簡化了數據訪問層繁瑣的重複性代碼。sql

Hibernate是一個優秀的ORM實現,很大程度上簡化了DAO的編碼功能。數據庫

Hibernate能夠很方便的進行數據的移植工做。api

Hibernate提供了緩存機制,是程序執行更改的高效。緩存

2.什麼是ORM框架?

  ORM(Object Relation Mapping)對象關係映射,是把數據庫中的關係數據映射成爲程序中的對象。session

  使用ORM的優勢:提升了開發效率下降了開發成本、開發更簡單更對象化、可移植性強。app

3.Hibernate中如何在控制檯查看打印的sql語句?

  在Config裏面把Hibernate.show_sql設置爲true就能夠。可是不建議開啓,由於開啓以後會下降程序的運行效率。框架

4.Hibernate有幾種查詢方式?

  三種ide

  • hql
  • 原生sql
  • 條件查詢Criteria

5.Hibernate實體類能夠被定義爲final嗎?

  能夠定義爲final類,可是這樣的話就不能使用Hibernate代理模式下的延遲關聯來提升性能了,因此不建議定義實體類爲final。函數

6.Hibernate中使用Integer和int作映射有什麼區別?

  Integer類型是對象,它的值容許爲null,而int屬於基礎數據類型,值不能爲null。性能

7.Hibernate是如何工做的?

讀取並解析配置文件。

讀取並解析映射文件,建立SessionFactory。

打開Session。

建立事務。

進行持久化操做。

提交事務。

關閉Session。

關閉SeesionFactory。

8.get和load方法的區別?

  數據查詢時,沒有OID指定的對象,get方法返回null,load方法返回一個代理對象。

  load方法支持延遲加載,get方法不支持延遲加載。

9.說一下Hibernate的緩存機制?

  Hibernate經常使用的緩存有一級緩存和二級環境。

  一級緩存:也叫session緩存,只在session做用範圍內有效,不須要用戶干涉,有Hibernate自身維護,能夠經過evict方法清除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,經過調用Classnewlnstance()來建立實體類的實例,若是沒有無參的構造函數就會拋出異常。

相關文章
相關標籤/搜索