黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

面試題首頁 > Hibernate面試題

Hibernate面試題

001什么是 ORM 框架?

ORM是Object Relation Mapping的縮寫,意思是對象關系映射,是把數據庫中的關系數據映射成為程序中的對象。使用 ORM 的優點:提高了開發效率降低了開發成本、開發更簡單更對象化、可移植更強。

002簡單介紹下Hibernate。

Hibernate是持久層框架,通過對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。

003Hibernate的優點?

1)對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。
2)Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作
3)Hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。
4)Hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。

004Hibernate工作原理?

1.通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的讀取并解析映射信息
3.通過config.buildSessionFactory();//創建SessionFactory
4.sessionFactory.openSession();//打開Sesssion
5.session.beginTransaction();//創建事務Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事務
8.關閉Session
9.關閉SesstionFactory

005Hibernate 對象有哪些狀態?

臨時/瞬時狀態:直接 new 出來的對象,該對象還沒被持久化(沒保存在數據庫中),不受 Session 管理。
持久化狀態:當調用 Session 的 save/saveOrupdate/get/load/list 等方法的時候,對象就是持久化狀態。
游離狀態:Session 關閉之后對象就是游離狀態。

006Hibernate中get和load區別?

數據查詢時,沒有 OID 指定的對象,get() 返回 null;load() 返回一個代理對象。
load()支持延遲加載;get() 不支持延遲加載。

007在Hibernate 中getCurrentSession 和 openSession 的區別是什么?

getCurrentSession 會綁定當前線程,而 openSession 則不會。
getCurrentSession 事務是 Spring 控制的,并且不需要手動關閉,而 openSession 需要我們自己手動開啟和提交事務。

008如何在控制臺看到Hibernate生成并執行的sql?

在定義數據庫和數據庫屬性的文件applicationConfig.xml里面,把hibernate.show_sql 設置為true,這樣生成的SQL就會在控制臺出現了。注意:這樣做會加重系統的負擔,不利于性能調優。

009Hibernate中save、persist和saveOrUpdate這三個方法的不同之處?

都是用于將對象保存到數據庫中的方法。
1)save()只能執行INSERT操作,會立即執行Sql insert,save()的返回值是一個Serializable對象;
2)saveOrUpdate()可以進行 記錄的INSERT和UPDATE;
3)persist不保證立即執行,可能要等到flush;persist不更新緩存;persist()方法返回值為void;

010Hibernate是如何延遲加載?

通過設置屬性lazy進行設置是否需要懶加載。當Hibernate在查詢數據的時候,數據并沒有存在與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器的性能。

011說一下 Hibernate 的緩存機制?

Hibernate 常用的緩存有一級緩存和二級緩存:
一級緩存:也叫 Session 緩存,只在 Session 作用范圍內有效,不需要用戶干涉,由 hibernate 自身維護,可以通過:evict(object)清除 object 的緩存;clear()清除一級緩存中的所有緩存;flush()刷出緩存;
二級緩存:應用級別的緩存,在所有 Session 中都有效,支持配置第三方的緩存,如:EhCache。

012Hibernate中怎樣實現類之間的關系?(如:一對多、多對多的關系)?

通過配置文件中的many-to-one、one-to-many、many-to-many來實現類之間的關聯關系的。

013可不可以將Hibernate的實體類定義為final類?

可以將Hibernate的實體類定義為final類,但不建議這么做。因為Hibernate會使用代理模式在延遲關聯的情況下提高性能,如果你把實體類定義成final類之后,因為 Java不允許對final類進行擴展,所以Hibernate就無法再使用代理了,如此一來就限制了使用可以提升性能的手段。

014在Hibernate 中使用 Integer 和 int 做映射有什么區別?

Integer 類型為對象,它的值允許為 null,而 int 屬于基礎數據類型,值不能為 null。

015為什么在Hibernate的實體類中要提供一個無參數的構造器?

Hibernate框架會調用這個默認構造方法來構造實例對象,即Class類的newInstance方法 ,這個方法就是通過調用默認構造方法來創建實例對象的 。如果在實體類中找不到無參數的構造器,這個方法就會拋出一個InstantiationException異常。

016Hibernate 如何進行批量更新?

Hibernate在做插入操作時會把要操作的對象全部放到自身的內部緩存來進行管理。當海量數據插入的時候,會有很多對象被納入內部緩存,就可能出現OutOfMemoryError(內存溢出異常),因此最好做到如下三點:
1.做海量數據批量操作一定要關閉控制臺顯示執行的sql語句;
2.繞過Hibernate API ,直接通過 JDBC API 來做,這個方法性能上是比較好的,也是最快的;
3.如果還是使用Hibernate API ,使用分段插入。

017如何優化Hibernate?

1)HQL優化
2)API的正確使用(如根據不同的業務類型選用不同的集合及查詢API)
3)主配置參數(日志,查詢緩存,fetch_size, batch_size等)
4)映射文件優化(ID生成策略,二級緩存,延遲加載,關聯優化)
5)一級緩存的管理
6)針對二級緩存,還有許多特有的策略

018一般情況下,關系數據模型與對象模型之間有哪些匹配關系(ABC)。

A. 表對應類
B. 記錄對應對象
C. 表的字段對應類的屬性
D. 表之間的參考關系對應類之間的依賴關系

019以下關于SessionFactory的說法哪些正確?(BC)

A. 對于每個數據庫事務,應該創建一個SessionFactory對象
B. 一個SessionFactory對象對應一個數據庫存儲源。
C. SessionFactory是重量級的對象,不應該隨意創建。如果系統中只有一個數據庫存儲源,只需要創建一個。
D. SessionFactory的load()方法用于加載持久化對象

020關于HQL與SQL,以下哪些說法正確?(BD)

A. HQL與SQL沒什么差別
B. HQL面向對象,而SQL操縱關系數據庫
C. 在HQL與SQL中,都包含select,insert,update,delete語句
D. HQL僅用于查詢數據,不支持insert,update和delete語句

021以下哪些屬于Session的方法?(ABCDF)

A. load()
B. save()
C. delete()
D. update()
E. open()
F. close()

022以下程序的打印結果是什么?(C)

tx = session.beginTransaction();
Customer c1=(Customer)session.load(Customer.class,new Long(1));
Customer c2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();
A. 運行出錯,拋出異常
B. 打印false
C. 打印true

023元素有一個cascade屬性,如果希望Hibernate級聯保存集合中的對象,casecade屬性應該取什么值?(D)

A. none
B. save
C. delete
D. save-update

024執行以下程序,Hibernate需要向數據庫提交幾條update語句?(B)

以下程序代碼對Customer的name屬性修改了兩次:(B)

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.setName(\"Jack\");
customer.setName(\"Mike\");
tx.commit();
A. 0 
B. 1 
C. 2 
D. 3

025在持久化層,對象分為哪些狀態?(ACD)

A. 臨時狀態
B. 獨立狀態
C. 游離狀態
D. 持久化狀態

目錄

返回頂部
主站蜘蛛池模板: 成人欧美视频在线观看播放 | 日韩在线伦理片免费观看 | 亚洲第一福利视频导航 | 亚洲欧美中日韩中文字幕 | 天天摸天天添 | 4138殇情影院理论片午夜 | 在线看色片 | 精品小视频| 欧美白人黑人xxxx猛交 | 看全色黄大色黄大片 视 | 久草中文视频 | 午夜视频福利在线观看 | 成人永久免费福利视频网站 | 亚洲国产成+人+综合 | 日日夜夜操美女 | 亚洲日韩欧美一区二区在线 | 亚洲高清国产一区二区三区 | 羞羞视频在线观看视频 | 色456| 色在线综合 | 免费二级c片在线观看a | 欧美精品束缚一区二区三区 | 国产一区欧美 | 高清一级毛片一本到免费观看 | 国产精品japanese人妖 | 黄在线观看网站 | 小xav导航福利网址 小处雏一区二区三区精 | 午夜精品视频在线 | 日本欧美一区二区三区在线 | 婷婷色婷婷 | 欧美日韩一二三区 | 午夜国产在线观看 | a级毛片蜜桃成熟时2在线播放 | 国产三级精品三级在专区 | a级特黄毛片免费观看 | 强制高潮18xxxxhd日韩 | 亚洲中文字幕特级毛片 | 中国大陆高清aⅴ毛片 | 国产精品二区三区 | 成人免费视频网址 | 狠狠插狠狠干 |