Java面試題(Hibernate)

113. 為什么要使用 hibernate?

  • 對JDBC訪問數(shù)據(jù)庫的代碼做了封裝廷臼,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。
  • Hibernate是一個基于JDBC的主流持久化框架饵溅,是一個優(yōu)秀的ORM實現(xiàn)赫冬。他很大程度的簡化DAO層的編碼工作
  • hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實現(xiàn)透明性目木。
  • hibernate的性能非常好换途,因為它是個輕量級框架。映射的靈活性很出色刽射。它支持各種關(guān)系數(shù)據(jù)庫军拟,從一對一到多對多的各種復(fù)雜關(guān)系。

114. 什么是 ORM 框架誓禁?**

對象-關(guān)系映射(Object-Relational Mapping懈息,簡稱ORM),面向?qū)ο蟮拈_發(fā)方法是當(dāng)今企業(yè)級應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法摹恰,關(guān)系數(shù)據(jù)庫是企業(yè)級應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲系統(tǒng)辫继。對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實體的兩種表現(xiàn)形式怒见,業(yè)務(wù)實體在內(nèi)存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)姑宽。內(nèi)存中的對象之間存在關(guān)聯(lián)和繼承關(guān)系遣耍,而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達(dá)多對多關(guān)聯(lián)和繼承關(guān)系炮车。因此舵变,對象-關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射.

115. hibernate 中如何在控制臺查看打印的 sql 語句

參考:blog.csdn.net/Randy_Wang_/article/details/79460306

116. hibernate 有幾種查詢方式瘦穆?

  • hql查詢
  • sql查詢
  • 條件查詢
hql查詢棋傍,sql查詢,條件查詢

HQL:  Hibernate Query Language. 面向?qū)ο蟮膶懛?
Query query = session.createQuery("from Customer where name = ?");
query.setParameter(0, "蒼老師");
Query.list();

QBC:  Query By Criteria.(條件查詢)
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.eq("name", "花姐"));
List<Customer> list = criteria.list();

SQL:
SQLQuery query = session.createSQLQuery("select * from customer");
List<Object[]> list = query.list();

SQLQuery query = session.createSQLQuery("select * from customer");
query.addEntity(Customer.class);
List<Customer> list = query.list();

Hql: 具體分類
1难审、 屬性查詢 2瘫拣、 參數(shù)查詢、命名參數(shù)查詢 3告喊、 關(guān)聯(lián)查詢 4麸拄、 分頁查詢 5、 統(tǒng)計函數(shù)

HQL和SQL的區(qū)別

HQL是面向?qū)ο蟛樵儾僮鞯那琒QL是結(jié)構(gòu)化查詢語言 是面向數(shù)據(jù)庫表結(jié)構(gòu)的

117. hibernate 實體類可以被定義為 final 嗎拢切?

可以將Hibernate的實體類定義為final類,但這種做法并不好秆吵。因為Hibernate會使用代理模式在延遲關(guān)聯(lián)的情況下提高性能淮椰,如果你把實體類定義成final類之后,因為 Java不允許對final類進(jìn)行擴(kuò)展纳寂,所以Hibernate就無法再使用代理了主穗,如此一來就限制了使用可以提升性能的手段。不過毙芜,如果你的持久化類實現(xiàn)了一個接口而且在該接口中聲明了所有定義于實體類中的所有public的方法輪到話忽媒,你就能夠避免出現(xiàn)前面所說的不利后果。

118. 在 hibernate 中使用 Integer 和 int 做映射有什么區(qū)別腋粥?

在Hibernate中晦雨,如果將OID定義為Integer類型,那么Hibernate就可以根據(jù)其值是否為null而判斷一個對象是否是臨時的隘冲,如果將OID定義為了int類型闹瞧,還需要在hbm映射文件中設(shè)置其unsaved-value屬性為0。

119. hibernate 是如何工作的展辞?

20190403231419411.png

區(qū)別奥邮?

  • load() 沒有使用對象的其他屬性的時候,沒有SQL 延遲加載
  • get() 沒有使用對象的其他屬性的時候纵竖,也生成了SQL 立即加載

121. 說一下 hibernate 的緩存機(jī)制漠烧?

Hibernate中的緩存分為一級緩存和二級緩存。
一級緩存就是 Session 級別的緩存靡砌,在事務(wù)范圍內(nèi)有效是,內(nèi)置的不能被卸載已脓。二級緩存是 SesionFactory級別的緩存,從應(yīng)用啟動到應(yīng)用結(jié)束有效通殃。是可選的度液,默認(rèn)沒有二級緩存,需要手動開啟画舌。保存數(shù)據(jù)庫后堕担,緩存在內(nèi)存中保存一份,如果更新了數(shù)據(jù)庫就要同步更新曲聂。
什么樣的數(shù)據(jù)適合存放到第二級緩存中霹购?


20190403231533818.png

擴(kuò)展:hibernate的二級緩存默認(rèn)是不支持分布式緩存的。使用 memcahe,redis等中央緩存來代替二級緩存朋腋。

122. hibernate 對象有哪些狀態(tài)齐疙?

hibernate里對象有三種狀態(tài):

  • Transient(瞬時):對象剛new出來,還沒設(shè)id旭咽,設(shè)了其他值贞奋。
  • Persistent(持久):調(diào)用了save()、saveOrUpdate()穷绵,就變成Persistent轿塔,有id。
  • etached(脫管):當(dāng)session close()完之后仲墨,變成Detached勾缭。


    20190403231622847.png

123. 在 hibernate 中 getCurrentSession 和 openSession 的區(qū)別是什么?

openSession 從字面上可以看得出來目养,是打開一個新的session對象漫拭,而且每次使用都是打開一個新的session,假如連續(xù)使用多次混稽,則獲得的session不是同一個對象采驻,并且使用完需要調(diào)用close方法關(guān)閉session。

getCurrentSession 匈勋,從字面上可以看得出來礼旅,是獲取當(dāng)前上下文一個session對象,當(dāng)?shù)谝淮问褂么朔椒〞r洽洁,會自動產(chǎn)生一個session對象痘系,并且連續(xù)使用多次時,得到的session都是同一個對象饿自,這就是與openSession的區(qū)別之一汰翠,簡單而言澜驮,getCurrentSession 就是:如果有已經(jīng)使用的,用舊的志鹃,如果沒有娄昆,建新的。

注意:在實際開發(fā)中佛纫,往往使用getCurrentSession多妓局,因為一般是處理同一個事務(wù)(即是使用一個數(shù)據(jù)庫的情況),所以在一般情況下比較少使用openSession或者說openSession是比較老舊的一套接口了呈宇。

124hibernate 實體類必須要有無參構(gòu)造函數(shù)嗎好爬?為什么?

必須甥啄,因為hibernate框架會調(diào)用這個默認(rèn)構(gòu)造方法來構(gòu)造實例對象存炮,即Class類的newInstance方法,這個方法就是通過調(diào)用默認(rèn)構(gòu)造方法來創(chuàng)建實例對象的蜈漓。

另外再提醒一點僵蛛,如果你沒有提供任何構(gòu)造方法,虛擬機(jī)會自動提供默認(rèn)構(gòu)造方法(無參構(gòu)造器)迎变,但是如果你提供了其他有參數(shù)的構(gòu)造方法的話充尉,虛擬機(jī)就不再為你提供默認(rèn)構(gòu)造方法,這時必須手動把無參構(gòu)造器寫在代碼里衣形,否則new Xxxx()是會報錯的驼侠,所以默認(rèn)的構(gòu)造方法不是必須的,只在有多個構(gòu)造方法時才是必須的谆吴,這里“必須”指的是“必須手動寫出來”倒源。

目錄:2020最新Java面試題及答案匯總(上)
目錄:2020最新Java面試題及答案匯總(下)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市句狼,隨后出現(xiàn)的幾起案子笋熬,更是在濱河造成了極大的恐慌,老刑警劉巖腻菇,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胳螟,死亡現(xiàn)場離奇詭異,居然都是意外死亡筹吐,警方通過查閱死者的電腦和手機(jī)糖耸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丘薛,“玉大人嘉竟,你說我怎么就攤上這事。” “怎么了舍扰?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵倦蚪,是天一觀的道長。 經(jīng)常有香客問我边苹,道長陵且,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任勾给,我火速辦了婚禮滩报,結(jié)果婚禮上锅知,老公的妹妹穿的比我還像新娘播急。我一直安慰自己,他們只是感情好售睹,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布桩警。 她就那樣靜靜地躺著,像睡著了一般昌妹。 火紅的嫁衣襯著肌膚如雪捶枢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天飞崖,我揣著相機(jī)與錄音烂叔,去河邊找鬼。 笑死固歪,一個胖子當(dāng)著我的面吹牛蒜鸡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牢裳,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼逢防,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒲讯?” 一聲冷哼從身側(cè)響起忘朝,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎判帮,沒想到半個月后局嘁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡晦墙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年导狡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偎痛。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡旱捧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枚赡,我是刑警寧澤氓癌,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站贫橙,受9級特大地震影響贪婉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卢肃,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一疲迂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莫湘,春花似錦尤蒿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忙芒,卻和暖如春示弓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呵萨。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工奏属, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人潮峦。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓囱皿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親跑杭。 傳聞我的和親對象是個殘疾皇子铆帽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349