淺談Hibernate

大家好,我是IT修真院成都分院第7期的JAVA學(xué)員龔劍飛绵估,一枚正直純潔善良的java程序員。

今天給大家分享一下卡骂,一個(gè)比較好用的ORM框架————Hibernate国裳。


1.背景介紹

先介紹下背景

Hibernate是什么?

Hibernate全跨,翻譯過(guò)來(lái)是冬眠的意思缝左,正好現(xiàn)在已經(jīng)進(jìn)入秋季,世間萬(wàn)物開(kāi)始準(zhǔn)備冬眠了。其實(shí)對(duì)于對(duì)象來(lái)說(shuō)就是持久化渺杉。

ORM蛇数,即Object-Relational Mapping,它的作用就是在關(guān)系型數(shù)據(jù)庫(kù)和對(duì)象之間做了一個(gè)映射是越。從對(duì)象(Object)映射到關(guān)系(Relation)耳舅,再?gòu)年P(guān)系映射到對(duì)象。這樣倚评,我們?cè)诓僮鲾?shù)據(jù)庫(kù)的時(shí)候浦徊,不需要再去和復(fù)雜SQL打交道,只要像操作對(duì)象一樣操作它就可以了(把關(guān)系數(shù)據(jù)庫(kù)的字段在內(nèi)存中映射成對(duì)象的屬性)天梧。

Hibernate的產(chǎn)生背景:

大多數(shù)應(yīng)用程序都需要處理數(shù)據(jù)盔性。Java應(yīng)用程序運(yùn)行時(shí),往往把數(shù)據(jù)封裝為相互連接的對(duì)象網(wǎng)絡(luò)呢岗,但是當(dāng)程序結(jié)束時(shí)冕香,這些對(duì)象就會(huì)消失在一團(tuán)邏輯中,所以需要有一些保存它們的方法后豫。有時(shí)候悉尾,甚至在編寫(xiě)應(yīng)用程序之前,數(shù)據(jù)就已經(jīng)存在了硬贯,所以需要有讀入它們和將其表示為對(duì)象的方法焕襟。手動(dòng)編寫(xiě)代碼來(lái)執(zhí)行這些任務(wù)不僅單調(diào)乏味、易于出錯(cuò)饭豹,而且會(huì)占用整個(gè)應(yīng)用程序的很大一部分開(kāi)發(fā)工作量鸵赖。

Gavin King開(kāi)發(fā)hibernate的動(dòng)機(jī)有兩個(gè):發(fā)現(xiàn)CMP太爛;贏得對(duì)老板的爭(zhēng)執(zhí)拄衰。Gavin King當(dāng)時(shí)沒(méi)有任何用SQL開(kāi)發(fā)數(shù)據(jù)庫(kù)的經(jīng)驗(yàn)它褪,Gavin King開(kāi)發(fā)hibernate的第一件事是去街上買(mǎi)了本SQL基礎(chǔ)的書(shū)

2.知識(shí)剖析

執(zhí)行流程

Configuration接口:負(fù)責(zé)配置并啟動(dòng)Hibernate

SessionFactory接口:負(fù)責(zé)初始化Hibernate

Session接口:負(fù)責(zé)持久化對(duì)象的CRUD操作

Transaction接口:負(fù)責(zé)事務(wù)

Query接口和Criteria接口:負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢(xún)

3.常見(jiàn)問(wèn)題

如何操作Hibernate?

4.解決方案

來(lái)給大家演示一下基本操作

5.編碼實(shí)戰(zhàn)

6.擴(kuò)展思考

Mybatis同樣也是非常流行的ORM框架翘悉,主要著力點(diǎn)在于 POJO 與 SQL 之間的映射關(guān)系茫打。然后通過(guò)映射配置文件,將SQL所需的參數(shù)妖混,以及返回的結(jié)果字段映射到指定 POJO 老赤。相對(duì)Hibernate“O/R”而言,Mybatis 是一種“Sql Mapping”的ORM實(shí)現(xiàn)制市。

Hibernate優(yōu)勢(shì)

Hibernate的DAO層開(kāi)發(fā)比MyBatis簡(jiǎn)單抬旺,Mybatis需要維護(hù)SQL和結(jié)果映射。

Hibernate對(duì)對(duì)象的維護(hù)和緩存要比MyBatis好祥楣,對(duì)增刪改查的對(duì)象的維護(hù)要方便开财。

Hibernate數(shù)據(jù)庫(kù)移植性很好汉柒,MyBatis的數(shù)據(jù)庫(kù)移植性不好,不同的數(shù)據(jù)庫(kù)需要寫(xiě)不同SQL责鳍。

Hibernate有更好的二級(jí)緩存機(jī)制碾褂,可以使用第三方緩存。MyBatis本身提供的緩存機(jī)制不佳历葛。

Mybatis優(yōu)勢(shì)

MyBatis可以進(jìn)行更為細(xì)致的SQL優(yōu)化正塌,可以減少查詢(xún)字段。

MyBatis容易掌握啃洋,而Hibernate門(mén)檻較高传货。

7.參考文獻(xiàn)

CSDN博客

8.更多討論

問(wèn):hibernate和mybatis的主要區(qū)別是什么?

答:hibernate更重,一些簡(jiǎn)單的語(yǔ)句不用自己寫(xiě)宏娄。

MyBatis要輕量化一些问裕,sqlmapper是必須自己寫(xiě)的

問(wèn):講一下orm

對(duì)象關(guān)系映射,其實(shí)就是把JAVA代碼中的一個(gè)類(lèi)孵坚,和數(shù)據(jù)庫(kù)中的一張表相對(duì)應(yīng)

問(wèn):load()和get()的區(qū)別

load是延遲加載粮宛,get是立即加載。

問(wèn):hibernate的全自動(dòng)體現(xiàn)在什么方面

體現(xiàn)在如果你只用簡(jiǎn)單的語(yǔ)句卖宠,是不用自己寫(xiě)的

問(wèn):說(shuō)下Hibernate的緩存機(jī)制

evit(Object obj)將指定的持久化對(duì)象從一級(jí)緩存中清除,釋放對(duì)象所占用的內(nèi)存資源,指定對(duì)象從持久化狀態(tài)變?yōu)槊摴軤顟B(tài),從而成為游離對(duì)象巍杈。

clear()將一級(jí)緩存中的所有持久化對(duì)象清除,釋放其占用的內(nèi)存資源。

contains(Object obj)判斷指定的對(duì)象是否存在于一級(jí)緩存中扛伍。

flush()刷新一級(jí)緩存區(qū)的內(nèi)容,使之與數(shù)據(jù)庫(kù)數(shù)據(jù)保持同步筷畦。

try{/*開(kāi)啟一個(gè)事務(wù)*/tx=session.beginTransaction();/*從數(shù)據(jù)庫(kù)中獲取id="402881e534fa5a440134fa5a45340002"的Customer對(duì)象*/Customer customer1= (Customer)session.get(Customer.class, "402881e534fa5a440134fa5a45340002");

System.out.println("customer.getUsername is"+customer1.getUsername());/*事務(wù)提交*/tx.commit();

System.out.println("-------------------------------------");/*開(kāi)啟一個(gè)新事務(wù)*/tx=session.beginTransaction();/*從數(shù)據(jù)庫(kù)中獲取id="402881e534fa5a440134fa5a45340002"的Customer對(duì)象*/Customer customer2= (Customer)session.get(Customer.class, "402881e534fa5a440134fa5a45340002");

System.out.println("customer2.getUsername is"+customer2.getUsername());/*事務(wù)提交*/tx.commit();

System.out.println("-------------------------------------");/*比較兩個(gè)get()方法獲取的對(duì)象是否是同一個(gè)對(duì)象*/System.out.println("customer1 == customer2 result is "+(customer1==customer2));

}

customer1== customer2 result istrue

PPT



undefined_騰訊視頻

今天的分享就到這里啦,歡迎大家點(diǎn)贊刺洒、轉(zhuǎn)發(fā)鳖宾、留言、拍磚~

技能樹(shù).IT修真院“我們相信人人都可以成為一個(gè)工程師逆航,現(xiàn)在開(kāi)始鼎文,找個(gè)師兄,帶你入門(mén)因俐,掌控自己學(xué)習(xí)的節(jié)奏拇惋,學(xué)習(xí)的路上不再迷茫”抹剩。

這里是技能樹(shù).IT修真院撑帖,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線(xiàn),學(xué)習(xí)透明化澳眷,成長(zhǎng)可見(jiàn)化胡嘿,師兄1對(duì)1免費(fèi)指導(dǎo)【嘲快來(lái)與我一起學(xué)習(xí)吧~我的邀請(qǐng)碼:13869506灶平,或者你可以直接點(diǎn)擊此鏈接:http://www.jnshu.com/login/1/13869506

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箍土,隨后出現(xiàn)的幾起案子逢享,更是在濱河造成了極大的恐慌,老刑警劉巖吴藻,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞒爬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡沟堡,警方通過(guò)查閱死者的電腦和手機(jī)侧但,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)航罗,“玉大人禀横,你說(shuō)我怎么就攤上這事≈嘌” “怎么了柏锄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)复亏。 經(jīng)常有香客問(wèn)我趾娃,道長(zhǎng),這世上最難降的妖魔是什么缔御? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任抬闷,我火速辦了婚禮,結(jié)果婚禮上耕突,老公的妹妹穿的比我還像新娘笤成。我一直安慰自己,他們只是感情好有勾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布疹启。 她就那樣靜靜地躺著,像睡著了一般蔼卡。 火紅的嫁衣襯著肌膚如雪喊崖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天雇逞,我揣著相機(jī)與錄音荤懂,去河邊找鬼。 笑死塘砸,一個(gè)胖子當(dāng)著我的面吹牛节仿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掉蔬,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼廊宪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矾瘾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起箭启,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壕翩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后傅寡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體放妈,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年荐操,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芜抒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡托启,死狀恐怖宅倒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驾中,我是刑警寧澤唉堪,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站肩民,受9級(jí)特大地震影響唠亚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜持痰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一灶搜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧工窍,春花似錦割卖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至淹仑,卻和暖如春丙挽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匀借。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工颜阐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吓肋。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓凳怨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肤舞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容