java对象关系映射ROM
一、對(duì)象關(guān)系映射ORM概述
對(duì)象關(guān)系映射(Object-Relational Mapping,簡(jiǎn)稱ORM)是一種為了解決程序的面向?qū)ο竽P团c數(shù)據(jù)庫(kù)的關(guān)系模型互不匹配問(wèn)題的技術(shù);簡(jiǎn)單的說(shuō),ORM是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù)(在Java中可以用XML或者是注解),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中或者將關(guān)系數(shù)據(jù)庫(kù)表中的行轉(zhuǎn)換成Java對(duì)象,其本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。
在ORM過(guò)程中最重要的概念是映射(Mapping),通過(guò)這種映射可以使業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)分離。從面向?qū)ο髞?lái)說(shuō),數(shù)據(jù)庫(kù)不應(yīng)該和業(yè)務(wù)邏輯綁定到一起,ORM則起到這樣的分離作用,使數(shù)據(jù)庫(kù)層透明,開(kāi)發(fā)人員真正的面向?qū)ο蟆?/p> 下圖簡(jiǎn)單說(shuō)明了ORM在多層系統(tǒng)架構(gòu)中的這個(gè)作用。
(圖片來(lái)自網(wǎng)絡(luò)www.shsxt.com)
目前大多數(shù)項(xiàng)目或產(chǎn)品都使用關(guān)系型數(shù)據(jù)庫(kù)實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的存儲(chǔ),這樣在開(kāi)發(fā)過(guò)程中,常常有一些業(yè)務(wù)邏輯需要直接用寫(xiě)SQL語(yǔ)句實(shí)現(xiàn),但這樣開(kāi)發(fā)的結(jié)果是:遍地布滿SQL語(yǔ)句。這些高藕合的SQL語(yǔ)句給系統(tǒng)的改造和升級(jí)帶來(lái)很多無(wú)法預(yù)計(jì)的障礙。為了提高項(xiàng)目的靈活性,特別是快速開(kāi)發(fā),ORM是一個(gè)不錯(cuò)的選擇。舉個(gè)簡(jiǎn)單的例子:在使用ORM的系統(tǒng)中,當(dāng)數(shù)據(jù)庫(kù)模型改變時(shí),不再需要理會(huì)邏輯代碼和SQL語(yǔ)句中涉及到該模型的所有改動(dòng),只需要將該模型映射的對(duì)象稍作改動(dòng),甚至不做改動(dòng)就可以滿足要求。][3]
圖片來(lái)自網(wǎng)絡(luò)(上海尚學(xué)堂)
二、ORM特性及優(yōu)缺點(diǎn)
1、ORM特性
1.提高了開(kāi)發(fā)效率。由于ORM可以自動(dòng)對(duì)Entity對(duì)象與數(shù)據(jù)庫(kù)中的Table進(jìn)行字段與屬性的映射,所以我們實(shí)際可能已經(jīng)不需要一個(gè)專用的、龐大的數(shù)據(jù)訪問(wèn)層。
2.ORM提供了對(duì)數(shù)據(jù)庫(kù)的映射,不用sql直接編碼,能夠像操作對(duì)象一樣從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)。
2、ORM優(yōu)缺點(diǎn)
ORM的缺點(diǎn)是會(huì)犧牲程序的執(zhí)行效率和會(huì)固定思維模式。從系統(tǒng)結(jié)構(gòu)上來(lái)看,采用ORM的系統(tǒng)一般都是多層系統(tǒng),系統(tǒng)的層次多了,效率就會(huì)降低。ORM是一種完全的面向?qū)ο蟮淖龇?#xff0c;而面向?qū)ο蟮淖龇ㄒ矔?huì)對(duì)性能產(chǎn)生一定的影響。
在我們開(kāi)發(fā)系統(tǒng)時(shí),一般都有性能問(wèn)題。性能問(wèn)題主要產(chǎn)生在算法不正確和與數(shù)據(jù)庫(kù)不正確的使用上。ORM所生成的代碼一般不太可能寫(xiě)出很高效的算法,在數(shù)據(jù) 庫(kù)應(yīng)用上更有可能會(huì)被誤用,主要體現(xiàn)在對(duì)持久對(duì)象的提取和和數(shù)據(jù)的加工處理上,如果用上了ORM,程序員很有可能將全部的數(shù)據(jù)提取到內(nèi)存對(duì)象中,然后再進(jìn) 行過(guò)濾和加工處理,這樣就容易產(chǎn)生性能問(wèn)題。
在對(duì)對(duì)象做持久化時(shí),ORM一般會(huì)持久化所有的屬性,有時(shí),這是不希望的。
但ORM是一種工具,工具確實(shí)能解決一些重復(fù),簡(jiǎn)單的勞動(dòng)。這是不可否認(rèn)的。但我們不能指望工具能一勞永逸的解決所有問(wèn)題,有些問(wèn)題還是需要特殊處理的,但需要特殊處理的部分對(duì)絕大多數(shù)的系統(tǒng),應(yīng)該是很少的。
感謝閱讀上海尚學(xué)堂文章,獲取更多文章或技術(shù)支持,請(qǐng)點(diǎn)擊 上海Java培訓(xùn)
總結(jié)
以上是生活随笔為你收集整理的java对象关系映射ROM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Arduino的光敏传感器和超声波测距传
- 下一篇: make的使用和Makefile规则和编