淺談Hibernate與Jpa的區(qū)別與聯(lián)系

在討論Hibernate與Jpa的關(guān)系是羊精,首先要明確Jpa的用途匾七。JPA全稱為Java Persistence API 絮短,Java持久化API是Sun公司在Java EE 5規(guī)范中提出的Java持久化接口。JPA吸取了目前Java持久化技術(shù)的優(yōu)點(diǎn)昨忆,旨在規(guī)范戚丸、簡化Java對象的持久化工作。使用JPA持久化對象,并不是依賴于某一個ORM框架限府。與Jpa相關(guān)的就是這個ORM技術(shù)夺颤,ORM 是Object-Relation-Mapping,即對象關(guān)系影射技術(shù)胁勺,是對象持久化的核心世澜。ORM是對JDBC的封裝,從而解決了JDBC的各種存在問題:

a) 繁瑣的代碼問題

用JDBC的API編程訪問數(shù)據(jù)庫署穗,代碼量較大寥裂,特別是訪問字段較多的表的時候,代碼顯得繁瑣案疲、累贅封恰,容易出錯。ORM則建立了Java對象與數(shù)據(jù)庫對象之間的影射關(guān)系褐啡,程序員不需要編寫復(fù)雜的SQL語句诺舔,直接操作Java對象即可,從而大大降低了代碼量备畦,也使程序員更加專注于業(yè)務(wù)邏輯的實現(xiàn)低飒。

b) 數(shù)據(jù)庫對象連接問題

關(guān)系數(shù)據(jù)對象之間,存在各種關(guān)系懂盐,包括1對1褥赊、1對多、多對1莉恼、多對多拌喉、級聯(lián)等。在數(shù)據(jù)庫對象更新的時候俐银,采用JDBC編程司光,必須十分小心處理這些關(guān)系,以保證維持這些關(guān)系不會出現(xiàn)錯誤悉患,而這個過程是一個很費(fèi)時費(fèi)力的過程。

ORM建立Java對象與數(shù)據(jù)庫對象關(guān)系影射的同時榆俺,也自動根據(jù)數(shù)據(jù)庫對象之間的關(guān)系創(chuàng)建Java對象的關(guān)系售躁,并且提供了維持這些關(guān)系完整、有效的機(jī)制茴晋。


c) 系統(tǒng)架構(gòu)問題

JDBC屬于數(shù)據(jù)訪問層陪捷,但是使用JDBC編程時,必須知道后臺是用什么數(shù)據(jù)庫诺擅、有哪些表市袖、各個表有有哪些字段、各個字段的類型是什么、表與表之間什么關(guān)系苍碟、創(chuàng)建了什么索引等等與后臺數(shù)據(jù)庫相關(guān)的詳細(xì)信息酒觅。

使用ORM技術(shù),可以將數(shù)據(jù)庫層完全隱蔽微峰,呈獻(xiàn)給程序員的只有Java的對象舷丹,程序員只需要根據(jù)業(yè)務(wù)邏輯的需要調(diào)用Java對象的Getter和 Setter方法,即可實現(xiàn)對后臺數(shù)據(jù)庫的操作蜓肆,程序員不必知道后臺采用什么數(shù)據(jù)庫颜凯、有哪些表、有什么字段仗扬、表與表之間有什么關(guān)系症概。

d) 性能問題

采用JDBC編程,在很多時候存在效率低下的問題早芭。

pstmt =conn.prepareStatement("insert into user_info values(?,?)");

for (int i=0; i<1000; i++) {

pstmt.setInt(1,i);

pstmt.setString(2,"User"+i.toString());

pstmt.executeUpdate();

}

以上程序?qū)⑾蚝笈_數(shù)據(jù)庫發(fā)送1000次SQL語句執(zhí)行請求彼城,運(yùn)行效率較低。

采用ORM技術(shù)逼友,ORM框架將根據(jù)具體數(shù)據(jù)庫操作需要精肃,會自動延遲向后臺數(shù)據(jù)庫發(fā)送SQL請求,ORM也可以根據(jù)實際情況帜乞,將數(shù)據(jù)庫訪問操作合成司抱,盡量減少不必要的數(shù)據(jù)庫操作請求。

知道Jpa是一種規(guī)范黎烈,而Hibernate是它的一種實現(xiàn)习柠。除了Hibernate,還有EclipseLink(曾經(jīng)的toplink)照棋,OpenJPA等可供選擇资溃,所以使用Jpa的一個好處是,可以更換實現(xiàn)而不必改動太多代碼烈炭。

在play中定義Model時溶锭,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany等等符隙。但它們提供的功能基礎(chǔ)趴捅,有時候想定義的更細(xì)一些,難免會用到Hibernate本身的annotation霹疫。我當(dāng)時想拱绑,jpa這 么弱還要用它干什么,為什么不直接使用hibernate的丽蝎?反正我又不會換成別的實現(xiàn)猎拨。因為我很快決定不再使用hibernate,這個問題就一直放下了。直到我現(xiàn)在在新公司红省,做項目要用到Hibernate额各。

我想拋開jpa,直接使用hibernate的注解來定義Model类腮,很快發(fā)現(xiàn)了幾個問題:

jpa中有Entity, Table臊泰,hibernate中也有,但是內(nèi)容不同蚜枢;

jpa中有Column,OneToMany等缸逃,Hibernate中沒有,也沒有替代品厂抽;

我原以為hibernate對jpa的支持需频,是另提供了一套專用于jpa的注解,但現(xiàn)在看起來似乎不是筷凤。一些重要的注解如Column, OneToMany等昭殉,hibernate沒有提供,這說明jpa的注解已經(jīng)是hibernate的核心藐守,hibernate只提供了一些補(bǔ)充挪丢,而不是兩 套注解。要是這樣卢厂,hibernate對jpa的支持還真夠足量乾蓬,我們要使用hibernate注解就必定要使用jpa。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慎恒,一起剝皮案震驚了整個濱河市任内,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌融柬,老刑警劉巖死嗦,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粒氧,居然都是意外死亡越除,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門外盯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摘盆,“玉大人,你說我怎么就攤上這事门怪。” “怎么了锅纺?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵掷空,是天一觀的道長。 經(jīng)常有香客問我,道長坦弟,這世上最難降的妖魔是什么护锤? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮酿傍,結(jié)果婚禮上烙懦,老公的妹妹穿的比我還像新娘。我一直安慰自己赤炒,他們只是感情好氯析,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莺褒,像睡著了一般掩缓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遵岩,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天你辣,我揣著相機(jī)與錄音,去河邊找鬼尘执。 笑死舍哄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的誊锭。 我是一名探鬼主播表悬,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炉旷!你這毒婦竟也來了签孔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窘行,失蹤者是張志新(化名)和其女友劉穎饥追,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罐盔,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡但绕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惶看。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏顺。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纬黎,靈堂內(nèi)的尸體忽然破棺而出幅骄,到底是詐尸還是另有隱情,我是刑警寧澤本今,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布拆座,位于F島的核電站主巍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挪凑。R本人自食惡果不足惜孕索,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躏碳。 院中可真熱鬧搞旭,春花似錦、人聲如沸菇绵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脸甘。三九已至恳啥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丹诀,已是汗流浹背钝的。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铆遭,地道東北人硝桩。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像枚荣,于是被迫代替她去往敵國和親碗脊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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

  • 本文中我們介紹并比較兩種最流行的開源持久框架:iBATIS和Hibernate,我們還會討論到Java Persi...
    大同若魚閱讀 4,312評論 4 27
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法害碾,類相關(guān)的語法矢劲,內(nèi)部類的語法,繼承相關(guān)的語法慌随,異常的語法芬沉,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 很簡單 意外的邂逅讓我們相戀/很濃 很甜 沒有太多的渲染/我們一起吃早餐 拉著的手在出汗/什么都很自然 不要刻意的...
    淚花香閱讀 809評論 3 5
  • 故事很長。簡言之阁猜,從130斤失戀少女到窈窕女郎丸逸,從前臺到年薪15萬,從小縣城到大上海剃袍。 各種滋味黄刚,都有。直到蛻變那...
    阿好在德國閱讀 520評論 0 7