999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

對象關系映射框架的研究與實現

2008-12-31 00:00:00
電腦知識與技術 2008年17期

摘要:針對對象模型和關系模型之間的“阻抗不匹配”問題,通過對java平臺下的對象關系映射的幾種解決方案分析比較,結合中小型應用中對象關系映射的普遍性及其在開發過程中的特點,設計實現了一個新的對象關系映射框架。該框架的應用可使得應用程序開發人員只關心數據的處理而不用理解數據庫的結構和數據庫訪問的問題,讓開發人員更專注于業務邏輯的設計以達到提高軟件開發的效率和質量的目的。

關鍵詞:java;對象關系映射;框架

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)17-21435-04

1 引言

幾乎所有的應用程序都需要在一個持久化的存儲系統中存放和取回信息,那么如何將對象作為永久性信息來存儲和訪問就成為了我們在面向對象分析設計和實現過程中時常要面臨的一個問題。通過關系數據庫系統持久化對象是目前普遍采用的方式,但是面向對象技術主要采用對象模型來描述現實世界,而關系數據庫是利用關系模型來表示數據,面向對象的軟件使用關系數據庫作為存儲機制意味著數據在對象模型和關系模型間的轉換。對象模型基于軟件工程的一些原理,而關系模型則基于數學原理,兩種模型理論基礎的不同導致了它們之間的“阻抗不匹配”,正是這種不匹配使得使用關系數據庫的面向對象軟件開發人員通常要花大量的時間來進行對象持久化操作。因此要使面向對象的應用實用化,關鍵是要解決對象模型和關系模型的轉換問題,這樣ORM(Object-Relation Mapping,對象關系映射)便應運而生。

開發人員需要一種方式使面向對象方法中使用的各種對象映射到后臺的關系型數據庫中,把對表直接進行的操作,變成了對類的屬性和函數的操作,這就稱為對象關系映射。從軟件分層的角度來看,這種方式實際上是在業務層和數據層間添加一個軟件層,降低了業務層和數據層的耦合度,提高了系統的擴展性和可維護性,提高了開發效率。在應用中使用ORM,就等于在關系模型和對象模型之間架起了一座溝通的橋梁,從而把開發人員從低級重復的勞動中解脫出來,使之有更多的時間關注實際的商業邏輯需求。

2 已有的解決方案

1)硬編碼方式:在業務方法中直接嵌入了SQL語句,SQL語句是面向關系的,依賴于關系數據模型。雖然結構簡單、運行快,這給應用程序帶來一些缺點,如:使程序結構不清晰,可讀性差,難調試,難維護等。

2)數據訪問層方式:是對硬編碼方式的一個抽象,將硬編碼方式中的數據庫操作獨立出來,將SQL語句集中到對應的數據訪問類中,為每一種可能的數據庫訪問操作提供單獨的方法,形成了一個在業務邏輯和數據庫之間的數據訪問層。這樣保證了業務邏輯與數據訪問分離,降低了業務邏輯與數據處理的耦合,在一定程度上提高了軟件的可擴展性和可維護性,但會產生大量冗余代碼,靈活度不夠等。

3)映射層方式:和數據訪問層的方式類似,在業務邏輯和后臺數據庫之中添加一個層。但不同的是這種方式采用元數據或反射實現業務對象和關系數據之間的映射。對象和數據庫之間的轉換就可以透明地進行,而不用關心數據庫連接、事務等問題。該策略進一步屏蔽業務邏輯對數據庫操作的依賴,隔離了應用程序和數據庫的變更。當對數據庫結構或業務邏輯中的類發生改變后,整個系統并不需要改動已有的編碼,也不用重新編譯。該策略能夠大大降低數據訪問的編碼和維護工作,以及對開發人員的技能要求。Java環境下有幾種主要的解決方案,如CMP、JDO、Hibernate等。雖然它們都用不同的方式較好實現了對象關系映射,對于一些中小型項目而言這些框架都有明顯的不足,比如EJB的CMP必須遵守復雜的J2EE規范,生成大量的接口文件和配置文件,使用JDO時的操作方式繁瑣,Hibernate靈活度太強而使得一般用戶難以選擇和把握等,因而難以實施這些成形的方案。

3 新框架的設計與實現

對于如新聞網站、網上商店、論壇系統、教學管理等中小型應用軟件領域而言,多數采用的是以數據庫為中心的開發方式,數據表會根據用戶需求在數據庫中預先做好,開發人員再采用各種面向對象的語言使用相關的數據庫訪問技術編寫代碼來操縱數據庫。數據庫中的大多數表只是起到一個記錄保存作用的,少數表之間涉及關聯關系,只需要提供基本的添加、修改、保存、刪除的功能和一些簡單關聯、查詢的功能就能滿足它們的功能需求。此時如果采用一些現有的ORM框架,由于ORM框架本身的組織結構過于龐大、復雜,并且由于這種復雜性,導致短期內難以達到讓開發人員放心使用的程度,因此難以在中小型應用中得到使用。鑒于國內開發中的種種的問題,將設計一個對象關系映射層框架來解決中小型項目應用中的數據存取需求,同時能提高系統的維護性及可復用性。

3.1 框架的整體結構

整個框架的外部結構由三個服務接口和兩個包組成:其中exception包封裝映射層向外界的異常接口,implement包實現具體的對象關系映射;三個服務接口為:

1)Session接口:提供給外界的接口,直接調用Session對象實現的是對對象透明的訪問和保存;

2)Transaction接口:主要提供事務的控制,具體包括:一個事務的啟動、提交與回滾;

3)Context接口:主要提供對象描述信息用于建立Session中的修改、刪除、查詢條件,具體包括根據一個類的屬性名得到其對應的字段名。

框架的核心本質是在implement包實現的,該包的整體結構如圖1所示。其中各子包和類的功能如下:

1)config包:主要提供O/R映射框架的基礎信息;

2)serverimpl包:主要提供服務接口的實現;

3)transaction包:主要提供系統所使用的事務;

4)sql包:主要提供根據要求產生相應的sql語句;

5)transform包:主要提供Java對象與數據庫之間的信息轉換;

6)connection包:主要提供系統所使用的數據庫連接;

7)dialog包:主要提供各種數據庫特有的功能;

8)lob包:主要提供系統對于特種類型的處理;

9)id包:主要提供自動生成主鍵;

10)JDBCTemplet:主要實現具體的JDBC操作。

3.2 具體實現

以上簡單的出了整個框架的大致結構,下面就實現過程中的關鍵問題來對implement包中的幾個主要的框架核心類圖和包圖詳細介紹。

1)對象關系的映射問題

這是實現一個映射層框架的重點。對于數據庫中特有的機制如存儲過程等,由于它們在系統中實際運用得不多,加上映射實現難度大,本框架沒有直接實現,僅僅提供了單獨的SQL語句接口,讓用戶可以用傳統的硬編碼SQL語句的方式使用這些機制。本框架通過transform包實現了對象的映射、對象屬性的映射和對象間關系的映射。transform包主要提供Java對象與數據庫之間的信息轉換,包括:對象和表的映射;屬性和字段的映射;一對一和一對多關系的映射。

映射層的難點在于如何讓持久對象映射到關系型數據庫中,而不需要知道持久對象以及數據庫中表的信息?,F已有的ORM框架實現對象和數據庫結構的映射一般采用兩種方式:反射和基于元數據的XML技術。利用反射機制來動態取得特性中描述的結構來獲取映射對象的屬性和關系數據庫表的列的對應等映射的信息,使用基于元數據的XML文件這種方法是讀取XML文件,從中獲取映射信息。而在使用XML文件的情況下需要進行大量的XML文件的配置工作。使用第一種方式可以避免對XML文件的編寫和配置工作,本框架主要利用反射來實現對象關系映射。但由于直接把反射寫入程序中存在一定的危害性,框架具體實現時提供一個類對反射進行了封裝,提供一種透明使用反射的方式。其中實現對象關系映射功能的類為TransformTool(在transform包中),類結構定義如下圖2所示:

2)數據庫無關性問題

數據庫無關性要求對數據庫的訪問做一個封裝,能夠屏蔽不同數據庫之間的差異。這樣在更換后臺數據庫的時候,能不用重新修改代碼。在Java平臺下,對數據庫的訪問操作最終要歸結到SQL語句的執行,而SQL語句執行的首要條件是獲得數據庫的連接。由于Java平臺下有多種得到數據庫連接的方式,所以本框架設計一個類來屏蔽各種數據庫連接的獲取方式??蚣苁褂胏onnection包來解決這個問題,其中主要類的類圖如圖3所示。

本框架中,把不同來源的數據庫連接抽象成ConnectionProvider接口,由ConnectionProvider對外提供數據庫連接。再用DataSourceConnection類和DriverManagerConnection類來分別實現不同方式下的數據庫連接的獲取。ConnectionProviderFactory類很簡單,主要功能就是根據配置文件中用戶設置的參數,獲取不同的ConnectionPrivider類,然后當需要數據庫操作時,調用ConnectionProvider類的getConnection()即可得到數據庫的連接,而我們用戶不用關心數據庫連接獲取的細節。ConnectionProvider不需要用戶生成,直接在框架內部調用。ConnectionProvider類層次的設計是典型的Factory設計模式和Strategy設計模式的應用。

3)SQL語句自動生成的問題

映射框架的一個重要特點就是應用程序人員直接使用對象,而不關心底層數據庫的結構,實質是框架生成了相應的SQL語句。在本框架中,通過sql包中的類層次來實現。sql包主要用于在運行時刻構造對象持久化操作需要的SQL語句。由于對象持久化的操作,最終都要歸結到利用JDBC 應用程序接口調用SQL語句的執行,因此SQL語句的動態生成也是對象/關系映射層框架實現的一個重點。sql包中主要類的類圖如圖4所示。

由TransFormTool類提供對象關系映射后的信息,并結合相應的Dialect構造插入、檢索、更新和刪除的SQL語句,SqlFactory主要在框架內部調用。

4)對象持久化實現的問題

SQL語句自動生成后,要執行SQL語句來實現持久化對象的存取。所以幾乎所有的對象關系映射框架在實現對象和關系間的相互映射后,最終都要利用JDBC來實現SQL的執行。正因如此,對象關系映射框架基本上可看成是對JDBC不同程度、不同方式的封裝。persist包的主要功能是封裝數據庫的JDBC操作來實現具體實現對象的持久化,主要類圖如圖5所示。

其中,JDBCTemplet實現的是對底層JDBC的封裝,Persist類根據SqlFactory接口提供的SQL語句及JDBCTemplet提供的SQL語句執行功能來實現對象的存取。Persist類在框架內部調用。

5)存取管理的實現問題

主要是提供給外界一個方便的接口,使得外界很容易的使用框架來進行對象的持久化操作。本框架中是通過Session、SessionImpl、Persist等幾個類協作來實現的,其中Session是提供給外界的接口,SessionImpl是實現這個接口的類,類圖如圖6所示。

所有的持久化操作都是通過數據庫持久機制(Persist)完成的,數據庫持久機制不需要用戶調用或者生成,由會話對象(Session)根據不同的持久對象自動產生和調用。當用戶需要進行持久化操作(創建、刪除、更新、查找)時,調用會話對象的方法即可完成持久化操作。

SessionImpl接口是映射層框架關鍵的一個類。在運行時刻,SessionImpl維護到關系數據庫的連接并管理與他們的交互。SessionImpl實際上是在Persist、Transaction和Session等類之間扮演了一個協調者的角色。它在程序運行的時候調用ConfigLoader(config包)從配置文件中取得數據庫配置的各項參數;調用TransformTool獲得對象關系映射信息;SqlFactory根據TransformTool和Dialect提供的信息生成相應的SQL語句;再通過Persist執行對象的存取。在調用Session方法進行持久化的過程中,通過Transaction接口可以啟動一個事務,再進行相關操作。

4 結束語

本對象/關系映射層框架在無需配置XML的前提下,完成了對象與關系的基本映射內容,提供了自動生成SQL語句的機制,對數據庫的連接進行了建立與管理,實現了對對象透明的訪問和保存。針對中小型應用,該框架的使用可以使得業務邏輯層只關心數據的處理而不用理解數據庫的結構和數據庫訪問的問題,讓開發人員更專注于業務邏輯層的設計而達到提高軟件開發的效率和質量的目的。

參考文獻:

[1] 孫衛琴.精通Hibernate Java對象持久化技術詳解[M].北京:電子工業出版社,2005.

[2] 詹因強.李靜.張禮平,等.運用設計模式實現數據持久性可復用性框架[J].微型電腦應用,2004,20(7):5-9.

[3] 王鑫.基于Hibernate的O/R映射數據持久化的研究[J].中南民族大學學報:自然科學版,2005,24(3):81-85.

[4] 劉濤.對象模型向數據模型映射的研究[J].佳木斯大學學報:自然科學版,2005,23(3):365-366.

[5] 張紹成,李華林,馬玉琴.基于Java的對象持久化方法研究[J].小型微型計算機系統,2005,26(2):264-267.

[6] 郭永寧.數據庫中持久對象到關系模型的映射[J].福建電腦,2003(5):15-16.

[7] 黃晨亮.對象關系映射的硬編碼方式的設計與實現[D].上海:上海師范大學,2005.

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文

主站蜘蛛池模板: 国产精品视频白浆免费视频| 91探花在线观看国产最新| 久久窝窝国产精品午夜看片| 亚洲国产看片基地久久1024| 自拍偷拍一区| 一区二区自拍| 日韩午夜福利在线观看| 91精品国产无线乱码在线| 亚洲不卡av中文在线| 亚洲无线一二三四区男男| 亚洲狼网站狼狼鲁亚洲下载| 久久久久久高潮白浆| 亚洲色无码专线精品观看| 91丝袜乱伦| 欧美精品成人一区二区在线观看| 国产区免费| 九九香蕉视频| 国产美女自慰在线观看| 天堂成人在线| 丰满人妻被猛烈进入无码| 亚洲精品卡2卡3卡4卡5卡区| 欧美a级在线| 国产在线精品美女观看| 亚洲动漫h| 欧美特级AAAAAA视频免费观看| 亚洲国产成熟视频在线多多 | 亚洲午夜天堂| 久久美女精品国产精品亚洲| 国产18在线播放| 亚洲国产天堂在线观看| 国内精自线i品一区202| 精品久久人人爽人人玩人人妻| 自慰网址在线观看| 久久亚洲欧美综合| 乱人伦99久久| 成人一级黄色毛片| 一本久道久综合久久鬼色| 99在线视频网站| 亚洲第一视频免费在线| 国产成人高清精品免费| 丁香六月激情综合| 玖玖精品在线| 日韩人妻无码制服丝袜视频| 欧美成人a∨视频免费观看| 国产你懂得| 国产91线观看| 国产福利在线观看精品| 毛片在线播放网址| 热伊人99re久久精品最新地| 色综合成人| 美女扒开下面流白浆在线试听 | 亚洲成人黄色网址| 亚洲成人77777| 欧美h在线观看| 91亚洲精选| a级毛片免费看| 国产一区二区福利| 19国产精品麻豆免费观看| 日韩无码白| 久久成人免费| 一级成人a毛片免费播放| 一级做a爰片久久毛片毛片| 无码'专区第一页| 无码AV高清毛片中国一级毛片| 40岁成熟女人牲交片免费| 婷婷六月综合网| 一级毛片在线播放| 99视频在线观看免费| 亚洲嫩模喷白浆| 午夜视频免费一区二区在线看| 色成人亚洲| 波多野结衣中文字幕久久| 无码在线激情片| 免费在线视频a| 日本一区高清| 极品av一区二区| 亚洲中文字幕97久久精品少妇| 激情六月丁香婷婷| 免费人成又黄又爽的视频网站| 粉嫩国产白浆在线观看| 国产v欧美v日韩v综合精品| 91视频青青草|