青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Javen-Studio 咖啡小屋

http://javenstudio.org - C++ Java 分布式 搜索引擎
Naven's Research Laboratory - Thinking of Life, Imagination of Future

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評(píng)論 :: 4 Trackbacks

學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù)
by Naven at 2005-09-19


何謂“持久化”
持久(Persistence),即把數(shù)據(jù)(如內(nèi)存中的對(duì)象)保存到可永久保存的存儲(chǔ)設(shè)備中(如磁盤)。持久化的主要應(yīng)用是將內(nèi)存中的數(shù)據(jù)存儲(chǔ)在關(guān)系型的數(shù)據(jù)庫中,當(dāng)然也可以存儲(chǔ)在磁盤文件中、XML數(shù)據(jù)文件中等等。

何謂“持久層”
持久層(Persistence Layer),即專注于實(shí)現(xiàn)數(shù)據(jù)持久化應(yīng)用領(lǐng)域的某個(gè)特定系統(tǒng)的一個(gè)邏輯層面,將數(shù)據(jù)使用者和數(shù)據(jù)實(shí)體相關(guān)聯(lián)。

何謂“對(duì)象數(shù)據(jù)映射(ORM)”
ORM-Object/Relational Mapper,即“對(duì)象-關(guān)系型數(shù)據(jù)映射組件”。對(duì)于O/R,即 Object(對(duì)象)和 Relational(關(guān)系型數(shù)據(jù)),表示必須同時(shí)使用面向?qū)ο蠛完P(guān)系型數(shù)據(jù)進(jìn)行開發(fā)。

備注:建模領(lǐng)域中的 ORM 為 Object/Role Modeling(對(duì)象角色建模)。另外這里是“O/R Mapper”而非“O/R Mapping”。相對(duì)來講,O/R Mapping 描述的是一種設(shè)計(jì)思想或者實(shí)現(xiàn)機(jī)制,而 O/R Mapper指以O(shè)/R原理設(shè)計(jì)的持久化框架(Framework),包括 O/R機(jī)制還有 SQL自生成,事務(wù)處理,Cache管理等。


除了 ORM 技術(shù),還有以下幾種持久化技術(shù)

主動(dòng)域?qū)ο竽J?BR>它是在實(shí)現(xiàn)中封裝了關(guān)系數(shù)據(jù)模型和數(shù)據(jù)訪問細(xì)節(jié)的一種形式。在 J2EE 架構(gòu)中,EJB 組件分為會(huì)話 EJB 和實(shí)體 EJB。會(huì)話 EJB 通常實(shí)現(xiàn)業(yè)務(wù)邏輯,而實(shí)體 EJB 表示業(yè)務(wù)實(shí)體。實(shí)體 EJB 又分為兩種:由 EJB 本身管理持久化,即 BMP(Bean-Managed Persistence);有 EJB 容器管理持久化,即 CMP(Container-Managed Persistence)。BM P就是主動(dòng)域?qū)ο竽J降囊粋€(gè)例子,BMP 表示由實(shí)體 EJB 自身管理數(shù)據(jù)訪問細(xì)節(jié)。
主動(dòng)域?qū)ο蟊旧砦挥跇I(yè)務(wù)邏輯層,因此采用主動(dòng)域?qū)ο竽J綍r(shí),整個(gè)應(yīng)用仍然是三層應(yīng)用結(jié)構(gòu),并沒有從業(yè)務(wù)邏輯層分離出獨(dú)立的持久化層。

JDO 模式
Java Data Objects(JDO)是 SUN 公司制定的描述對(duì)象持久化語義的標(biāo)準(zhǔn)API。嚴(yán)格的說,JDO 并不是對(duì)象-關(guān)系映射接口,因?yàn)樗С职褜?duì)象持久化到任意一種存儲(chǔ)系統(tǒng)中,包括 關(guān)系數(shù)據(jù)庫、面向?qū)ο蟮臄?shù)據(jù)庫、基于 XML 的數(shù)據(jù)庫,以及其他專有存儲(chǔ)系統(tǒng)。由于關(guān)系數(shù)據(jù)庫是目前最流行的存儲(chǔ)系統(tǒng),許多 JDO 的實(shí)現(xiàn)都包含了對(duì)象-關(guān)系映射服務(wù)。

CMP 模式
在 J2EE 架構(gòu)中,CMP(Container-Managed Persistence)表示由 EJB 容器來管理實(shí)體 EJB 的持久化,EJB 容器封裝了對(duì)象-關(guān)系的映射及數(shù)據(jù)訪問細(xì)節(jié)。CMP 和 ORM 的相似之處在于,兩者都提供對(duì)象-關(guān)系映射服務(wù),都把對(duì)象持久化的任務(wù)從業(yè)務(wù)邏輯中分離出來。區(qū)別在于 CMP 負(fù)責(zé)持久化實(shí)體 EJB 組件,而 ORM 負(fù)責(zé)持久化 POJO,它是普通的基于 Java Bean 形式的實(shí)體域?qū)ο蟆?/P>

一般把基于 Java Bean 形式的實(shí)體域?qū)ο蠓Q為 POJO(Plain Old Java Object),意為又普通又古老的 Java 對(duì)象的意思。隨著各種 ORM 映射工具的日趨成熟和流行,POJO有重現(xiàn)光彩,它和基于 CMP 的實(shí)體 EJB 相比,即簡(jiǎn)單又具有很高的可移植性,因此聯(lián)合使用 ORM 映射工具和 POJO,已經(jīng)成為一種越來越受歡迎的且用來取代 CMP 的持久化方案。POJO 的缺點(diǎn)就是無法做遠(yuǎn)程調(diào)用,不支持分布式計(jì)算。


為什么要做持久化和ORM設(shè)計(jì)

在目前的企業(yè)應(yīng)用系統(tǒng)設(shè)計(jì)中,MVC,即 Model(模型)- View(視圖)- Control(控制)為主要的系統(tǒng)架構(gòu)模式。MVC 中的 Model 包含了復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯,以及數(shù)據(jù)存取機(jī)制(如 JDBC的連接、SQL生成和Statement創(chuàng)建、還有ResultSet結(jié)果集的讀取等)等。將這些復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯分離,以將系統(tǒng)的緊耦合關(guān)系轉(zhuǎn)化為松耦合關(guān)系(即解耦合),是降低系統(tǒng)耦合度迫切要做的,也是持久化要做的工作。MVC 模式實(shí)現(xiàn)了架構(gòu)上將表現(xiàn)層(即View)和數(shù)據(jù)處理層(即Model)分離的解耦合,而持久化的設(shè)計(jì)則實(shí)現(xiàn)了數(shù)據(jù)處理層內(nèi)部的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯分離的解耦合。而 ORM 作為持久化設(shè)計(jì)中的最重要也最復(fù)雜的技術(shù),也是目前業(yè)界熱點(diǎn)技術(shù)。

簡(jiǎn)單來說,按通常的系統(tǒng)設(shè)計(jì),使用 JDBC 操作數(shù)據(jù)庫,業(yè)務(wù)處理邏輯和數(shù)據(jù)存取邏輯是混雜在一起的。
一般基本都是如下幾個(gè)步驟:
1、建立數(shù)據(jù)庫連接,獲得 Connection 對(duì)象。
2、根據(jù)用戶的輸入組裝查詢 SQL 語句。
3、根據(jù) SQL 語句建立 Statement 對(duì)象 或者 PreparedStatement 對(duì)象。
4、用 Connection 對(duì)象執(zhí)行 SQL語句,獲得結(jié)果集 ResultSet 對(duì)象。
5、然后一條一條讀取結(jié)果集 ResultSet 對(duì)象中的數(shù)據(jù)。
6、根據(jù)讀取到的數(shù)據(jù),按特定的業(yè)務(wù)邏輯進(jìn)行計(jì)算。
7、根據(jù)計(jì)算得到的結(jié)果再組裝更新 SQL 語句。
8、再使用 Connection 對(duì)象執(zhí)行更新 SQL 語句,以更新數(shù)據(jù)庫中的數(shù)據(jù)。
7、最后依次關(guān)閉各個(gè) Statement 對(duì)象和 Connection 對(duì)象。

由上可看出代碼邏輯非常復(fù)雜,這還不包括某條語句執(zhí)行失敗的處理邏輯。其中的業(yè)務(wù)處理邏輯和數(shù)據(jù)存取邏輯完全混雜在一塊。而一個(gè)完整的系統(tǒng)要包含成千上萬個(gè)這樣重復(fù)的而又混雜的處理過程,假如要對(duì)其中某些業(yè)務(wù)邏輯或者一些相關(guān)聯(lián)的業(yè)務(wù)流程做修改,要改動(dòng)的代碼量將不可想象。另一方面,假如要換數(shù)據(jù)庫產(chǎn)品或者運(yùn)行環(huán)境也可能是個(gè)不可能完成的任務(wù)。而用戶的運(yùn)行環(huán)境和要求卻千差萬別,我們不可能為每一個(gè)用戶每一種運(yùn)行環(huán)境設(shè)計(jì)一套一樣的系統(tǒng)。
所以就要將一樣的處理代碼即業(yè)務(wù)邏輯和可能不一樣的處理即數(shù)據(jù)存取邏輯分離開來,另一方面,關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)基本都是以一行行的數(shù)據(jù)進(jìn)行存取的,而程序運(yùn)行卻是一個(gè)個(gè)對(duì)象進(jìn)行處理,而目前大部分?jǐn)?shù)據(jù)庫驅(qū)動(dòng)技術(shù)(如ADO.NET、JDBC、ODBC等等)均是以行集的結(jié)果集一條條進(jìn)行處理的。所以為解決這一困難,就出現(xiàn) ORM 這一個(gè)對(duì)象和數(shù)據(jù)之間映射技術(shù)。

舉例來說,比如要完成一個(gè)購物打折促銷的程序,用 ORM 思想將如下實(shí)現(xiàn)(引自《深入淺出Hibernate》):
業(yè)務(wù)邏輯如下:
public Double calcAmount(String customerid, double amount)
{
    // 根據(jù)客戶ID獲得客戶記錄
    Customer customer = CustomerManager.getCustomer(custmerid);
    // 根據(jù)客戶等級(jí)獲得打折規(guī)則
    Promotion promotion = PromotionManager.getPromotion(customer.getLevel());
    // 累積客戶總消費(fèi)額,并保存累計(jì)結(jié)果
    customer.setSumAmount(customer.getSumAmount().add(amount);
    CustomerManager.save(customer);
    // 返回打折后的金額
    return amount.multiply(protomtion.getRatio());
}
這樣代碼就非常清晰了,而且與數(shù)據(jù)存取邏輯完全分離。設(shè)計(jì)業(yè)務(wù)邏輯代碼的時(shí)候完全不需要考慮數(shù)據(jù)庫JDBC的那些千篇一律的操作,而將它交給 CustomerManager 和 PromotionManager 兩個(gè)類去完成。這就是一個(gè)簡(jiǎn)單的 ORM 設(shè)計(jì),實(shí)際的 ORM 實(shí)現(xiàn)框架比這個(gè)要復(fù)雜的多。


目前有哪些流行的 ORM 產(chǎn)品
目前眾多廠商和開源社區(qū)都提供了持久層框架的實(shí)現(xiàn),常見的有
Apache OJB (http://db.apache.org/ojb/
Cayenne (http://objectstyle.org/cayenne/
Jaxor (http://jaxor.sourceforge.net
Hibernate (http://www.hibernate.org
iBatis (http://www.ibatis.com
jRelationalFramework (http://ijf.sourceforge.net
mirage (http://itor.cq2.org/en/oss/mirage/toon
SMYLE (http://www.drjava.de/smyle
TopLink (http://otn.oracle.com/products/ias/toplink/index.html
其中 TopLink 是 Oracle 的商業(yè)產(chǎn)品,其他均為開源項(xiàng)目。

其中 Hibernate 的輕量級(jí) ORM 模型逐步確立了在 Java ORM 架構(gòu)中領(lǐng)導(dǎo)地位,甚至取代復(fù)雜而又繁瑣的 EJB 模型而成為事實(shí)上的 Java ORM 工業(yè)標(biāo)準(zhǔn)。而且其中的許多設(shè)計(jì)均被 J2EE 標(biāo)準(zhǔn)組織吸納而成為最新 EJB 3.0 規(guī)范的標(biāo)準(zhǔn),這也是開源項(xiàng)目影響工業(yè)領(lǐng)域標(biāo)準(zhǔn)的有力見證。


參考文獻(xiàn):1、《深入淺出Hibernate》
         2、《精通Hibernate:Java對(duì)象持久化技術(shù)詳解》

posted on 2005-10-03 12:22 Javen-Studio 閱讀(10095) 評(píng)論(11)  編輯 收藏 引用

評(píng)論

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2006-03-29 11:24 bruselee
ke yi  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2006-04-19 18:09 ......
豆腐干豆腐干法  回復(fù)  更多評(píng)論
  

# 不錯(cuò),簡(jiǎn)單明了。。。。 2006-08-24 13:53 一品貓
好文!  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2006-11-18 14:05 seiren
謝謝了,  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2006-11-25 11:53 test
就算不用所謂的持久化,自己用屁股想都知道要把數(shù)據(jù)連接單獨(dú)分離,不要放在邏輯代碼里。。。  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2008-04-18 11:13 ann
很有說服力  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2008-12-01 15:25 beginnger
呵呵,受教了,謝謝  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2008-12-23 17:26 dfsf
看起來好像是這么回事
請(qǐng)問下

// 累積客戶總消費(fèi)額,并保存累計(jì)結(jié)果
customer.setSumAmount(customer.getSumAmount().add(amount);

這個(gè)地方真正操作數(shù)據(jù)庫的那個(gè)語句還需要自己手工寫嗎?
如果需要,那不就是個(gè)方法的封裝嗎?
還需要引入個(gè)什么持久層的概念不?  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2008-12-25 20:41 阿印
學(xué)習(xí)了,收藏了,呵呵  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù) 2008-12-31 16:50 大曹
這社會(huì),玩的就是概念。  回復(fù)  更多評(píng)論
  

# re: 學(xué)習(xí)筆記之什么是持久化和對(duì)象關(guān)系映射ORM技術(shù)[未登錄] 2010-01-06 19:11 David
受教了,多謝博主。  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费在线播放第一区高清av| 国产精品人人做人人爽| 91久久精品网| 正在播放亚洲| 欧美三级午夜理伦三级中视频| 久久中文欧美| 午夜精品免费| 国模吧视频一区| 久久久免费精品| 亚洲免费激情| 久久久久综合网| 一区二区三区四区五区精品| 国产精品久久久亚洲一区 | 日韩亚洲在线| 国产一区二区三区丝袜| 欧美护士18xxxxhd| 亚洲欧美一区二区精品久久久| 久久精品午夜| 亚洲精品日韩激情在线电影| 欧美特黄视频| 欧美精品亚洲一区二区在线播放| 99热这里只有成人精品国产| 久久久蜜桃一区二区人| 中国女人久久久| 亚洲精品黄网在线观看| 国产欧美一区二区精品忘忧草| 欧美精品1区2区| 久久人人97超碰人人澡爱香蕉| 亚洲视频999| 亚洲精品免费看| 亚洲国产天堂久久国产91| 久久影音先锋| 久久综合伊人77777| 久久精品国产精品亚洲| 欧美在线高清视频| 欧美一区二区视频观看视频| 正在播放欧美一区| 亚洲最新在线| 亚洲美女在线观看| 91久久亚洲| 亚洲精品国产精品国自产观看浪潮 | 悠悠资源网久久精品| 黄网动漫久久久| 136国产福利精品导航网址| 在线激情影院一区| 亚洲电影免费观看高清完整版在线观看| 国产精品久久久久久影视| 国产亚洲精品久久久| **性色生活片久久毛片| 亚洲精品中文字幕有码专区| 午夜精品福利视频| 免费人成精品欧美精品| 亚洲精品在线二区| 午夜国产欧美理论在线播放| 亚洲一区图片| 久久久精品一区二区三区| 欧美性理论片在线观看片免费| 国产精品网站一区| 亚洲欧美视频一区| 91久久久亚洲精品| 久久精品国产清高在天天线 | 亚洲性感激情| 欧美国产精品专区| 极品尤物av久久免费看| 亚洲视频一区二区免费在线观看| 久久婷婷国产麻豆91天堂| 夜夜嗨av一区二区三区中文字幕 | 亚洲手机在线| 国产精品日本精品| 亚洲一区二区三区高清不卡| 亚洲高清自拍| 欧美91精品| 99国产精品| 亚洲福利视频二区| 欧美精品日本| 亚洲一区二区精品在线| 亚洲调教视频在线观看| 欧美精品成人在线| 正在播放亚洲一区| 亚洲伊人网站| 国产日产精品一区二区三区四区的观看方式 | 毛片一区二区| 亚洲国产日韩欧美综合久久| 欧美成人免费视频| 久久综合狠狠综合久久综青草| 亚洲大胆女人| 亚洲欧洲日韩在线| 欧美视频二区| 久久精品国产成人| 夜夜夜精品看看| 午夜精品久久久久久99热软件| 狠狠v欧美v日韩v亚洲ⅴ| 久久综合国产精品台湾中文娱乐网| 久久亚洲国产成人| 亚洲一区二区欧美| 久久久国产精品一区二区中文| 一本久道久久综合狠狠爱| 久久成人这里只有精品| 91久久亚洲| 午夜精品一区二区三区四区| 亚洲电影专区| 亚洲欧美日韩精品一区二区| 亚洲大片在线观看| 久久久精品午夜少妇| 99热免费精品在线观看| 亚洲深夜激情| 亚洲私拍自拍| 玖玖精品视频| 久久夜色精品国产欧美乱极品| 欧美日韩岛国| 一区二区三区www| 亚洲国产精品成人久久综合一区| 亚洲一区免费网站| 亚洲视频一区二区免费在线观看| 欧美高清不卡在线| 91久久精品网| 一本久久知道综合久久| 欧美成人嫩草网站| 久久午夜影视| 亚洲第一天堂av| 欧美精品一区三区| 亚洲国产高清自拍| 亚洲成色777777在线观看影院| 小黄鸭精品aⅴ导航网站入口| 亚洲欧美电影在线观看| 国产亚洲激情在线| 久久精品国产亚洲精品| 欧美.www| 亚洲视频一区二区在线观看 | 欧美久久99| 亚洲午夜一区二区| 久久久久国产精品一区二区| 亚洲精品免费看| 欧美在线观看天堂一区二区三区| 欧美一区日韩一区| 亚洲黄色成人久久久| 欧美日韩一区成人| 欧美一区二区视频在线观看2020 | 国产精品一区二区三区久久| 欧美在线免费观看视频| 最新中文字幕一区二区三区| 香蕉乱码成人久久天堂爱免费| 国内精品久久久久久久果冻传媒 | 亚洲欧美日韩区| 亚洲黄页一区| 国产主播一区二区三区| 欧美日韩精品一区视频| 久久女同精品一区二区| 亚洲一区二区毛片| 亚洲国产欧美一区| 欧美在线日韩| 一区二区三区视频在线| 亚洲日本黄色| 在线播放豆国产99亚洲| 国产欧美日韩视频| 欧美午夜久久久| 美日韩精品视频免费看| 欧美在线亚洲| 欧美在线视频导航| 欧美在线视频一区| 久久激情五月婷婷| 久久久精品日韩| 久久天堂成人| 欧美.www| 国产精品久久久久久久久免费 | 亚洲免费婷婷| 久久久99精品免费观看不卡| 欧美在线观看网址综合| 美腿丝袜亚洲色图| 亚洲国产精品激情在线观看| 亚洲尤物影院| 国产精品久久久久国产a级| 亚洲电影在线观看| 美国成人毛片| 先锋亚洲精品| 国产精品系列在线播放| 99成人在线| 亚洲毛片一区二区| 欧美国产丝袜视频| 亚洲免费精彩视频| 久久久久久亚洲精品中文字幕| 免费观看成人网| 国产精品午夜国产小视频| 亚洲人成毛片在线播放女女| 亚洲欧美日韩在线播放| 久久久久国产一区二区三区四区| 亚洲第一主播视频| 欧美在线亚洲综合一区| 欧美激情一区二区三区蜜桃视频 | 夜夜精品视频一区二区| 久久精品国产91精品亚洲| 99re视频这里只有精品| 老司机67194精品线观看| 国产精品久久久久久户外露出| 亚洲精品一区二区三区蜜桃久| 久久午夜激情| 久久综合九色综合欧美就去吻| 国产目拍亚洲精品99久久精品 | 亚洲午夜视频在线观看| 91久久夜色精品国产九色|