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

Javen-Studio 咖啡小屋

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

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks

學習筆記之什么是持久化和對象關系映射ORM技術
by Naven at 2005-09-19


何謂“持久化”
持久(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的數據存儲在關系型的數據庫中,當然也可以存儲在磁盤文件中、XML數據文件中等等。

何謂“持久層”
持久層(Persistence Layer),即專注于實現數據持久化應用領域的某個特定系統的一個邏輯層面,將數據使用者和數據實體相關聯。

何謂“對象數據映射(ORM)”
ORM-Object/Relational Mapper,即“對象-關系型數據映射組件”。對于O/R,即 Object(對象)和 Relational(關系型數據),表示必須同時使用面向對象和關系型數據進行開發。

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


除了 ORM 技術,還有以下幾種持久化技術

主動域對象模式
它是在實現中封裝了關系數據模型和數據訪問細節的一種形式。在 J2EE 架構中,EJB 組件分為會話 EJB 和實體 EJB。會話 EJB 通常實現業務邏輯,而實體 EJB 表示業務實體。實體 EJB 又分為兩種:由 EJB 本身管理持久化,即 BMP(Bean-Managed Persistence);有 EJB 容器管理持久化,即 CMP(Container-Managed Persistence)。BM P就是主動域對象模式的一個例子,BMP 表示由實體 EJB 自身管理數據訪問細節。
主動域對象本身位于業務邏輯層,因此采用主動域對象模式時,整個應用仍然是三層應用結構,并沒有從業務邏輯層分離出獨立的持久化層。

JDO 模式
Java Data Objects(JDO)是 SUN 公司制定的描述對象持久化語義的標準API。嚴格的說,JDO 并不是對象-關系映射接口,因為它支持把對象持久化到任意一種存儲系統中,包括 關系數據庫、面向對象的數據庫、基于 XML 的數據庫,以及其他專有存儲系統。由于關系數據庫是目前最流行的存儲系統,許多 JDO 的實現都包含了對象-關系映射服務。

CMP 模式
在 J2EE 架構中,CMP(Container-Managed Persistence)表示由 EJB 容器來管理實體 EJB 的持久化,EJB 容器封裝了對象-關系的映射及數據訪問細節。CMP 和 ORM 的相似之處在于,兩者都提供對象-關系映射服務,都把對象持久化的任務從業務邏輯中分離出來。區別在于 CMP 負責持久化實體 EJB 組件,而 ORM 負責持久化 POJO,它是普通的基于 Java Bean 形式的實體域對象。

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


為什么要做持久化和ORM設計

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

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

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

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


目前有哪些流行的 ORM 產品
目前眾多廠商和開源社區都提供了持久層框架的實現,常見的有
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 的商業產品,其他均為開源項目。

其中 Hibernate 的輕量級 ORM 模型逐步確立了在 Java ORM 架構中領導地位,甚至取代復雜而又繁瑣的 EJB 模型而成為事實上的 Java ORM 工業標準。而且其中的許多設計均被 J2EE 標準組織吸納而成為最新 EJB 3.0 規范的標準,這也是開源項目影響工業領域標準的有力見證。


參考文獻:1、《深入淺出Hibernate》
         2、《精通Hibernate:Java對象持久化技術詳解》

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

評論

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2006-03-29 11:24 bruselee
ke yi  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2006-04-19 18:09 ......
豆腐干豆腐干法  回復  更多評論
  

# 不錯,簡單明了。。。。 2006-08-24 13:53 一品貓
好文!  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2006-11-18 14:05 seiren
謝謝了,  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2006-11-25 11:53 test
就算不用所謂的持久化,自己用屁股想都知道要把數據連接單獨分離,不要放在邏輯代碼里。。。  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2008-04-18 11:13 ann
很有說服力  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2008-12-01 15:25 beginnger
呵呵,受教了,謝謝  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2008-12-23 17:26 dfsf
看起來好像是這么回事
請問下

// 累積客戶總消費額,并保存累計結果
customer.setSumAmount(customer.getSumAmount().add(amount);

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

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2008-12-25 20:41 阿印
學習了,收藏了,呵呵  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術 2008-12-31 16:50 大曹
這社會,玩的就是概念。  回復  更多評論
  

# re: 學習筆記之什么是持久化和對象關系映射ORM技術[未登錄] 2010-01-06 19:11 David
受教了,多謝博主。  回復  更多評論
  


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            久久久综合网| 国内精品国产成人| 亚洲小视频在线观看| 欧美激情在线播放| 亚洲国产精品久久久久婷婷老年 | 欧美日韩一区在线播放| 欧美在线国产精品| 亚洲午夜高清视频| 一卡二卡3卡四卡高清精品视频| 欧美激情在线狂野欧美精品| 久久久久免费视频| 久久女同互慰一区二区三区| 欧美在线在线| 久久精品国产久精国产思思| 欧美一区二区三区视频在线| 亚洲欧美精品suv| 亚洲影视在线播放| 亚洲免费小视频| 亚洲视频第一页| 99在线|亚洲一区二区| 91久久精品一区二区别| 亚洲国产二区| 99精品久久免费看蜜臀剧情介绍| 亚洲黄一区二区三区| 亚洲精品在线免费观看视频| 激情小说亚洲一区| 亚洲精品三级| 亚洲欧美综合| 欧美资源在线| 久久中文精品| 亚洲国产美女| 亚洲欧美视频在线观看| 久久九九国产精品| 欧美日韩国产123区| 国产精品夜夜夜一区二区三区尤| 国产日韩av一区二区| 在线观看亚洲精品| 亚洲一区二区三区中文字幕| 久久精品三级| 亚洲激情影院| 性欧美xxxx视频在线观看| 看欧美日韩国产| 欧美先锋影音| 在线观看视频一区二区欧美日韩| 亚洲天堂偷拍| 男女精品网站| 一区二区三区免费在线观看| 午夜久久tv| 欧美黄污视频| 国产午夜精品久久久| 亚洲麻豆av| 久久久久久久91| 久久天堂av综合合色| 久久久噜噜噜久久人人看| 欧美不卡一卡二卡免费版| 亚洲国产成人一区| 亚洲精品欧洲| 亚洲欧美日韩精品久久久久| 欧美在线观看视频在线| 久久久精品tv| 欧美搞黄网站| 国产精品你懂的在线| 国产精品日本精品| 在线观看一区| 在线亚洲自拍| 久久色中文字幕| 一二三区精品| 欧美电影在线观看| 一区二区三区在线免费视频| 亚洲一区二区毛片| 亚洲人成免费| 欧美电影电视剧在线观看| 狠狠狠色丁香婷婷综合久久五月| 午夜精品一区二区三区在线视| 亚洲一级二级| 欧美/亚洲一区| 黄色亚洲精品| 久久狠狠婷婷| 亚洲影院在线观看| 欧美吻胸吃奶大尺度电影| 亚洲美女黄网| 亚洲国产精品精华液网站| 美乳少妇欧美精品| 亚洲国产高清视频| 亚洲电影专区| 欧美精品激情| 亚洲网在线观看| 欧美福利一区二区三区| 一区二区三区产品免费精品久久75 | 亚洲一级二级| 亚洲精品专区| 欧美国产高清| 一本色道久久综合亚洲精品小说| 最新精品在线| 欧美午夜精品久久久久久孕妇| 亚洲网站在线看| 亚洲午夜电影网| 国产女人水真多18毛片18精品视频| 欧美一区二区三区播放老司机| 亚洲综合久久久久| 黄色日韩精品| 亚洲三级影院| 国产精品免费福利| 久久福利影视| 麻豆精品传媒视频| 中国亚洲黄色| 欧美在线观看视频一区二区三区| 在线播放豆国产99亚洲| 亚洲国产综合在线看不卡| 欧美视频日韩| 久久综合伊人77777蜜臀| 欧美成人亚洲成人日韩成人| 亚洲午夜久久久久久久久电影院| 亚洲在线黄色| 亚洲国产一成人久久精品| 91久久综合| 国产午夜精品一区二区三区视频| 欧美国产精品一区| 欧美午夜视频| 欧美va天堂va视频va在线| 欧美日韩高清一区| 久热这里只精品99re8久| 欧美久久一级| 久久婷婷丁香| 国产精品国产福利国产秒拍 | 亚洲一区二区欧美| 久久综合激情| 亚洲欧美电影在线观看| 国产精品视频观看| 亚洲精品美女在线| 午夜日韩福利| 国产精品99久久久久久www| 午夜欧美大尺度福利影院在线看| 亚洲国产aⅴ天堂久久| 亚洲午夜黄色| 日韩西西人体444www| 久久aⅴ国产紧身牛仔裤| 一区二区三区久久| 欧美成人国产| 久久婷婷久久| 国产人妖伪娘一区91| 日韩视频在线一区二区| 亚洲成人在线网站| 欧美一区二区在线免费播放| 一区二区三区高清不卡| 麻豆久久久9性大片| 久久婷婷久久一区二区三区| 国产精品日本| 亚洲视频观看| 一区二区欧美在线观看| 蜜桃av综合| 欧美电影免费观看高清| 国内一区二区三区在线视频| 亚洲永久在线观看| 亚洲欧美高清| 国产精品国产精品国产专区不蜜| 亚洲精品免费电影| 亚洲最新视频在线| 久久久久国产精品午夜一区| 亚洲美女精品久久| 羞羞答答国产精品www一本| 亚洲国产婷婷香蕉久久久久久| 欧美在线亚洲一区| 久久久亚洲影院你懂的| 国产欧美va欧美va香蕉在| 亚洲砖区区免费| 久久精品国产免费看久久精品| 国产精品一区一区| 欧美在线视频免费观看| 久久先锋资源| 亚洲国产视频直播| 欧美精品一区二区三区四区| 亚洲国产视频一区| 99精品国产在热久久下载| 欧美日韩高清一区| 亚洲午夜激情网站| 久久久在线视频| 亚洲国产精品成人| 欧美日韩妖精视频| 亚洲尤物在线| 免费不卡欧美自拍视频| 国产精品一二三视频| 亚洲视频国产视频| 久久精品国产第一区二区三区| 欧美午夜久久| 在线视频精品一区| 日韩一本二本av| 免费亚洲电影| 欧美高清视频一区| 亚洲国产成人一区| 久久青草久久| 免费亚洲婷婷| 曰韩精品一区二区| 欧美日本在线视频| 欧美一区二区精品在线| 亚洲福利视频二区| 亚洲第一精品电影| 99亚洲伊人久久精品影院红桃| 午夜激情综合网| 精品999成人|