一、ORM簡(jiǎn)介
對(duì)象關(guān)系映射(Object Relational Mapping,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中。那么,到底如何實(shí)現(xiàn)持久化呢?一種簡(jiǎn)單的方案是采用硬編碼方式,為每一種可能的數(shù)據(jù)庫訪問操作提供單獨(dú)的方法。這種方案存在以下不足:
1.持久化層缺乏彈性。一旦出現(xiàn)業(yè)務(wù)需求的變更,就必須修改持久化層的接口
2.持久化層同時(shí)與域模型與關(guān)系數(shù)據(jù)庫模型綁定,不管域模型還是關(guān)系數(shù)據(jù)庫模型發(fā)生變化,毒藥修改持久化曾的相關(guān)程序代碼,增加了軟件的維護(hù)難度
ORM提供了實(shí)現(xiàn)持久化層的另一種模式,它采用映射元數(shù)據(jù)來描述對(duì)象關(guān)系的映射,使得ORM中間件能在任何一個(gè)應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)
庫層之間充當(dāng)橋梁。Java典型的ORM中間件有:Hibernate,ibatis,loonframework-db。
ORM的方法論基于三個(gè)核心原則:
· 簡(jiǎn)單。以最基本的形式建模數(shù)據(jù)。
· 傳達(dá)性。數(shù)據(jù)庫結(jié)構(gòu)被任何人都能理解的語言文檔化。
· 精確性。基于數(shù)據(jù)模型創(chuàng)建正確標(biāo)準(zhǔn)化了的結(jié)構(gòu)。
二、ORM的概念
ORM解決的主要問題是對(duì)象關(guān)系的映射。域模型和關(guān)系模型分別是建立在概念模型的基礎(chǔ)上的。域模型是面向?qū)ο蟮模P(guān)系模型是面向關(guān)
系的。一般情況下,一個(gè)持久化類和一個(gè)表對(duì)應(yīng),類的每個(gè)實(shí)例對(duì)應(yīng)表中的一條記錄,類的每個(gè)屬性對(duì)應(yīng)表的每個(gè)字段。
ORM技術(shù)特點(diǎn):
1.提高了開發(fā)效率。由于ORM可以自動(dòng)對(duì)Entity對(duì)象與數(shù)據(jù)庫中的Table進(jìn)行字段與屬性的映射,所以我們實(shí)際可能已經(jīng)不需要一個(gè)專用的
、龐大的數(shù)據(jù)訪問層。
2.ORM提供了對(duì)數(shù)據(jù)庫的映射,不用sql直接編碼,能夠像操作對(duì)象一樣從數(shù)據(jù)庫獲取數(shù)據(jù)。
三、ORM的優(yōu)缺點(diǎn)
這是我從別人的blog上copy過來的,講的非常貼切。
ORM的缺點(diǎn)是會(huì)犧牲程序的執(zhí)行效率和會(huì)固定思維模式。
從系統(tǒng)結(jié)構(gòu)上來看,采用ORM的系統(tǒng)一般都是多層系統(tǒng),系統(tǒng)的層次多了,效率就會(huì)降低。ORM是一種完全的面向?qū)ο蟮淖龇ǎ嫦驅(qū)ο蟮淖龇?br>
也會(huì)對(duì)性能產(chǎn)生一定的影響。
在我們開發(fā)系統(tǒng)時(shí),一般都有性能問題。性能問題主要產(chǎn)生在算法不正確和與數(shù)據(jù)庫不正確的使用上。ORM所生成的代碼一般不太可能寫出很高
效的算法,在數(shù)據(jù)庫應(yīng)用上更有可能會(huì)被誤用,主要體現(xiàn)在對(duì)持久對(duì)象的提取和和數(shù)據(jù)的加工處理上,如果用上了ORM,程序員很有可能將全部的數(shù)據(jù)提取到內(nèi)存對(duì)象中,然后再進(jìn)行過濾和加工處理,這樣就容易產(chǎn)生性能問題。
在對(duì)對(duì)象做持久化時(shí),ORM一般會(huì)持久化所有的屬性,有時(shí),這是不希望的。
但ORM是一種工具,工具確實(shí)能解決一些重復(fù),簡(jiǎn)單的勞動(dòng)。這是不可否認(rèn)的。但我們不能指望工具能一勞永逸的解決所有問題,有些問題還是需要特殊處理的,但需要特殊處理的部分對(duì)絕大多數(shù)的系統(tǒng),應(yīng)該是很少的。
對(duì)象關(guān)系映射(Object Relational Mapping,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中。那么,到底如何實(shí)現(xiàn)持久化呢?一種簡(jiǎn)單的方案是采用硬編碼方式,為每一種可能的數(shù)據(jù)庫訪問操作提供單獨(dú)的方法。這種方案存在以下不足:
1.持久化層缺乏彈性。一旦出現(xiàn)業(yè)務(wù)需求的變更,就必須修改持久化層的接口
2.持久化層同時(shí)與域模型與關(guān)系數(shù)據(jù)庫模型綁定,不管域模型還是關(guān)系數(shù)據(jù)庫模型發(fā)生變化,毒藥修改持久化曾的相關(guān)程序代碼,增加了軟件的維護(hù)難度
ORM提供了實(shí)現(xiàn)持久化層的另一種模式,它采用映射元數(shù)據(jù)來描述對(duì)象關(guān)系的映射,使得ORM中間件能在任何一個(gè)應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)
庫層之間充當(dāng)橋梁。Java典型的ORM中間件有:Hibernate,ibatis,loonframework-db。
ORM的方法論基于三個(gè)核心原則:
· 簡(jiǎn)單。以最基本的形式建模數(shù)據(jù)。
· 傳達(dá)性。數(shù)據(jù)庫結(jié)構(gòu)被任何人都能理解的語言文檔化。
· 精確性。基于數(shù)據(jù)模型創(chuàng)建正確標(biāo)準(zhǔn)化了的結(jié)構(gòu)。
二、ORM的概念
ORM解決的主要問題是對(duì)象關(guān)系的映射。域模型和關(guān)系模型分別是建立在概念模型的基礎(chǔ)上的。域模型是面向?qū)ο蟮模P(guān)系模型是面向關(guān)
系的。一般情況下,一個(gè)持久化類和一個(gè)表對(duì)應(yīng),類的每個(gè)實(shí)例對(duì)應(yīng)表中的一條記錄,類的每個(gè)屬性對(duì)應(yīng)表的每個(gè)字段。
ORM技術(shù)特點(diǎn):
1.提高了開發(fā)效率。由于ORM可以自動(dòng)對(duì)Entity對(duì)象與數(shù)據(jù)庫中的Table進(jìn)行字段與屬性的映射,所以我們實(shí)際可能已經(jīng)不需要一個(gè)專用的
、龐大的數(shù)據(jù)訪問層。
2.ORM提供了對(duì)數(shù)據(jù)庫的映射,不用sql直接編碼,能夠像操作對(duì)象一樣從數(shù)據(jù)庫獲取數(shù)據(jù)。
三、ORM的優(yōu)缺點(diǎn)
這是我從別人的blog上copy過來的,講的非常貼切。
ORM的缺點(diǎn)是會(huì)犧牲程序的執(zhí)行效率和會(huì)固定思維模式。
從系統(tǒng)結(jié)構(gòu)上來看,采用ORM的系統(tǒng)一般都是多層系統(tǒng),系統(tǒng)的層次多了,效率就會(huì)降低。ORM是一種完全的面向?qū)ο蟮淖龇ǎ嫦驅(qū)ο蟮淖龇?br>
也會(huì)對(duì)性能產(chǎn)生一定的影響。
在我們開發(fā)系統(tǒng)時(shí),一般都有性能問題。性能問題主要產(chǎn)生在算法不正確和與數(shù)據(jù)庫不正確的使用上。ORM所生成的代碼一般不太可能寫出很高
效的算法,在數(shù)據(jù)庫應(yīng)用上更有可能會(huì)被誤用,主要體現(xiàn)在對(duì)持久對(duì)象的提取和和數(shù)據(jù)的加工處理上,如果用上了ORM,程序員很有可能將全部的數(shù)據(jù)提取到內(nèi)存對(duì)象中,然后再進(jìn)行過濾和加工處理,這樣就容易產(chǎn)生性能問題。
在對(duì)對(duì)象做持久化時(shí),ORM一般會(huì)持久化所有的屬性,有時(shí),這是不希望的。
但ORM是一種工具,工具確實(shí)能解決一些重復(fù),簡(jiǎn)單的勞動(dòng)。這是不可否認(rèn)的。但我們不能指望工具能一勞永逸的解決所有問題,有些問題還是需要特殊處理的,但需要特殊處理的部分對(duì)絕大多數(shù)的系統(tǒng),應(yīng)該是很少的。
浙公網(wǎng)安備 33010602011771號(hào)