11.ORM介紹

了解orm,先了解以下概念:

  • 什么是“持久化”
    持久(Persistence)赶舆,即把數(shù)據(jù)(如內(nèi)存中的對象)保存到可永久保存的存儲設(shè)備中(如磁盤)怖糊。持久化的主要應(yīng)用是將內(nèi)存中的數(shù)據(jù)存儲在關(guān)系型的數(shù)據(jù)庫中滞详,當(dāng)然也可以存儲在磁盤文件中术陶、XML數(shù)據(jù)文件中等等磕瓷。
  • 什么是 “持久層”
    持久層(Persistence Layer)膘螟,即專注于實現(xiàn)數(shù)據(jù)持久化應(yīng)用領(lǐng)域的某個特定系統(tǒng)的一個邏輯層面笙僚,將數(shù)據(jù)使用者和數(shù)據(jù)實體相關(guān)聯(lián)芳肌。

一、什么是ORM

  • 對象關(guān)系映射(Object Relational Mapping肋层,簡稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)亿笤。簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù)栋猖,將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中净薛。那么,到底如何實現(xiàn)持久化呢蒲拉?一種簡單的方案是采用硬編碼方式肃拜,為每一種可能的數(shù)據(jù)庫訪問操作提供單獨的方法。
  • ORM提供了實現(xiàn)持久化層的另一種模式雌团,它采用映射元數(shù)據(jù)來描述對象關(guān)系的映射燃领,使得ORM中間件能在任何一個應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)庫層之間充當(dāng)橋梁。Java典型的ORM中間件有:Hibernate,ibatis,speedframework锦援。
  • 這種方案存在以下不足:
    1. 持久化層缺乏彈性猛蔽。一旦出現(xiàn)業(yè)務(wù)需求的變更,就必須修改持久化層的接口
    2. 持久化層同時與域模型與關(guān)系數(shù)據(jù)庫模型綁定灵寺,不管域模型還是關(guān)系數(shù)據(jù)庫模型發(fā)生變化曼库,毒藥修改持久化曾的相關(guān)程序代碼,增加了軟件的維護(hù)難度略板。
  • ORM的方法論基于三個核心原則:
  1. 簡單:以最基本的形式建模數(shù)據(jù)毁枯。
  2. 傳達(dá)性:數(shù)據(jù)庫結(jié)構(gòu)被任何人都能理解的語言文檔化。
  3. 精確性:基于數(shù)據(jù)模型創(chuàng)建正確標(biāo)準(zhǔn)化了的結(jié)構(gòu)叮称。

二后众、ORM的概念

  • 讓我們從O/R開始。字母O起源于"對象"(Object),而R則來自于"關(guān)系"(Relational)颅拦。幾乎所有的程序里面蒂誉,都存在對象和關(guān)系數(shù)據(jù)庫。在業(yè)務(wù)邏輯層和用戶界面層中距帅,我們是面向?qū)ο蟮挠蚁恰.?dāng)對象信息發(fā)生變化的時候,我們需要把對象的信息保存在關(guān)系數(shù)據(jù)庫中碌秸。
  • 當(dāng)你開發(fā)一個應(yīng)用程序的時候(不使用O/R Mapping),你可能會寫不少數(shù)據(jù)訪問層的代碼绍移,用來從數(shù)據(jù)庫保存悄窃,刪除,讀取對象信息蹂窖,等等轧抗。你在DAL中寫了很多的方法來讀取對象數(shù)據(jù),改變狀態(tài)對象等等任務(wù)瞬测。而這些代碼寫起來總是重復(fù)的横媚。
  • ORM解決的主要問題是對象關(guān)系的映射。域模型和關(guān)系模型分別是建立在概念模型的基礎(chǔ)上的月趟。域模型是面向?qū)ο蟮牡坪P(guān)系模型是面向關(guān)系的。一般情況下孝宗,一個持久化類和一個表對應(yīng)穷躁,類的每個實例對應(yīng)表中的一條記錄,類的每個屬性對應(yīng)表的每個字段因妇。
  • ORM技術(shù)特點:
  1. 提高了開發(fā)效率问潭。由于ORM可以自動對Entity對象與數(shù)據(jù)庫中的Table進(jìn)行字段與屬性的映射,所以我們實際可能已經(jīng)不需要一個專用的婚被、龐大的數(shù)據(jù)訪問層狡忙。
  2. ORM提供了對數(shù)據(jù)庫的映射,不用sql直接編碼摔寨,能夠像操作對象一樣從數(shù)據(jù)庫獲取數(shù)據(jù)去枷。

三、ORM的優(yōu)缺點

  • ORM的缺點是會犧牲程序的執(zhí)行效率和會固定思維模式是复。
    從系統(tǒng)結(jié)構(gòu)上來看,采用ORM的系統(tǒng)一般都是多層系統(tǒng)删顶,系統(tǒng)的層次多了,效率就會降低淑廊。ORM是一種完全的面向?qū)ο蟮淖龇ǘ河啵嫦驅(qū)ο蟮淖龇ㄒ矔π阅墚a(chǎn)生一定的影響。
  • 在我們開發(fā)系統(tǒng)時季惩,一般都有性能問題录粱。性能問題主要產(chǎn)生在算法不正確和與數(shù)據(jù)庫不正確的使用上。ORM所生成的代碼一般不太可能寫出很高效的算法画拾,在數(shù)據(jù)庫應(yīng)用上更有可能會被誤用啥繁,主要體現(xiàn)在對持久對象的提取和和數(shù)據(jù)的加工處理上,如果用上了ORM,程序員很有可能將全部的數(shù)據(jù)提取到內(nèi)存對象中青抛,然后再進(jìn)行過濾和加工處理旗闽,這樣就容易產(chǎn)生性能問題。
  • 在對對象做持久化時,ORM一般會持久化所有的屬性适室,有時嫡意,這是不希望的。
  • 但ORM是一種工具捣辆,工具確實能解決一些重復(fù)蔬螟,簡單的勞動。這是不可否認(rèn)的汽畴。但我們不能指望工具能一勞永逸的解決所有問題旧巾,有些問題還是需要特殊處理的,但需要特殊處理的部分對絕大多數(shù)的系統(tǒng)整袁,應(yīng)該是很少的菠齿。

Spring支持的ORM:

  1. Hibernate
  2. iBatis
  3. JPA (Java Persistence API)
  4. TopLink
  5. JDO (Java Data Objects)
  6. OJB

進(jìn)階學(xué)習(xí)參考 編寫ORM

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佑吝,一起剝皮案震驚了整個濱河市坐昙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芋忿,老刑警劉巖炸客,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戈钢,居然都是意外死亡痹仙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門殉了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來开仰,“玉大人,你說我怎么就攤上這事薪铜≈诠” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵隔箍,是天一觀的道長谓娃。 經(jīng)常有香客問我,道長蜒滩,這世上最難降的妖魔是什么滨达? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮俯艰,結(jié)果婚禮上捡遍,老公的妹妹穿的比我還像新娘。我一直安慰自己竹握,他們只是感情好画株,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般污秆。 火紅的嫁衣襯著肌膚如雪劈猪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天良拼,我揣著相機(jī)與錄音战得,去河邊找鬼。 笑死庸推,一個胖子當(dāng)著我的面吹牛常侦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贬媒,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼聋亡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了际乘?” 一聲冷哼從身側(cè)響起坡倔,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脖含,沒想到半個月后罪塔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡养葵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年征堪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片关拒。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡佃蚜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出着绊,到底是詐尸還是另有隱情谐算,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布畔柔,位于F島的核電站氯夷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏靶擦。R本人自食惡果不足惜腮考,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玄捕。 院中可真熱鬧踩蔚,春花似錦、人聲如沸枚粘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至福也,卻和暖如春局骤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暴凑。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工峦甩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人现喳。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓凯傲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗦篱。 傳聞我的和親對象是個殘疾皇子冰单,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349