亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        AORM持久層框架的設(shè)計與實現(xiàn)

        2016-01-27 06:24:07

        李 春 梅

        (安徽新華學(xué)院 信息工程學(xué)院,安徽 合肥 230088)

        ?

        AORM持久層框架的設(shè)計與實現(xiàn)

        李 春 梅

        (安徽新華學(xué)院 信息工程學(xué)院,安徽 合肥 230088)

        摘要:針對傳統(tǒng)ORM(object-relational mapping)框架使用成本高、執(zhí)行效率難以控制等缺點,結(jié)合軟件開發(fā)過程中的實際要求,提出了AORM(adaptive object-relational mapping)持久層框架的設(shè)計方案。該方案以C#的反射機制為基礎(chǔ),綜合考慮軟件實際開發(fā)過程中的具體要求,結(jié)合多種數(shù)據(jù)庫類型的語法特點,建立了以XML關(guān)系映射文件與自適應(yīng)關(guān)系映射相結(jié)合的AORM持久層框架。與傳統(tǒng)ORM框架相比,其最大的特點是將SQL語句獨立于應(yīng)用程序,非常有利于數(shù)據(jù)庫結(jié)構(gòu)的調(diào)整和優(yōu)化。

        關(guān)鍵詞:AORM;ORM;對象關(guān)系映射;多種數(shù)據(jù)庫類型;數(shù)據(jù)持久化

        ORM系統(tǒng)作為中間件,將關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)以及數(shù)據(jù)關(guān)系轉(zhuǎn)換成對象以及對象之間的關(guān)系[1],用于解決關(guān)系數(shù)據(jù)庫與對象之間存在的互不匹配的現(xiàn)象[2]。就目前市面上常見的ORM框架來說,基本上都是提前建立數(shù)據(jù)表與實體類對象及其屬性之間的映射關(guān)系[3],一方發(fā)生變化則另一方必須進行相應(yīng)的變化,而且實體類庫的變化則會導(dǎo)致整個系統(tǒng)的代碼均需要做出修改[4],一變則全變,限制了系統(tǒng)的靈活性。AORM的中心思想是使數(shù)據(jù)庫"適應(yīng)"實體類庫,而不是使實體類庫依賴數(shù)據(jù)庫結(jié)構(gòu)。從而使得開發(fā)人員可以嚴格的按照對象模型以及狀態(tài)機去編寫軟件,而無需考慮數(shù)據(jù)的存儲格式以及存儲方式, AORM則承擔起對象模型(實體類)與持久化數(shù)據(jù)之間的轉(zhuǎn)換,大大提高了系統(tǒng)的靈活性以及適用性。以下具體給出了AORM持久層框架的詳細設(shè)計與實現(xiàn)過程。

        1映射生成器的設(shè)計與實現(xiàn)

        映射生成器負責管理數(shù)據(jù)結(jié)果集與實體類之間的映射關(guān)系[5],并且將映射關(guān)系以XML文件為載體存儲在物理磁盤中,以便隨時調(diào)用。映射關(guān)系可事先定義好,也可以在實體類首次被實例化時自動的創(chuàng)建其映射關(guān)系,并生成相應(yīng)的XML文件進行存儲[6],即實現(xiàn)自動化映射,降低了開發(fā)人員的學(xué)習難度。映射生成器操作類如圖1所示。LoadMapping方法根據(jù)給定的映射文件存放路徑以及實體類類型獲取實體類的映射關(guān)系,BuildMapping方法則通過C#的反射機制,獲取該實體類的可讀寫屬性信息(包括繼承的屬性信息)[7],并與給定的數(shù)據(jù)列相互對照,提取二者匹配信息并生成映射關(guān)系文件(僅生成映射文件中的Properties小節(jié)的內(nèi)容)。

        映射關(guān)系映射文件結(jié)構(gòu)如下所示:

        〈entity-mapping〉

        〈class fulltypename="*" version="*" tablename=""〉

        〈properties〉

        〈property name="*" field-name="*" primarykey="true" readonly="true"/〉

        〈property name="*" field-name="*"/〉

        〈/properties〉

        〈operations〉

        〈operation name="" sqltype="0" sql="" returned="" 〉

        〈params〉〈param name="" type="" propertyname="" isnullable=""/〉〈/params〉

        〈results〉〈result Index="0" propertyname="*" /〉〈/results 〉

        〈/operation〉

        〈/operations〉

        〈/class〉

        〈/entity-mapping〉

        圖1AORM映射關(guān)系生成器

        其中class小節(jié)中的fulltypename標識實體類的全名稱,tablename標識實對應(yīng)的表/視圖,version標識映射文件的版本,其余小節(jié)定義如下:

        1) Properties小節(jié):定義實體類的值類型屬性以及繼承自BaseEntity類的引用類型屬性與數(shù)據(jù)列之間的對照關(guān)系。其中name對應(yīng)實體類的屬性,fieldname對應(yīng)數(shù)據(jù)列的名稱,primarykey標識當前的數(shù)據(jù)列是否為主鍵列,readonly標識是否為只讀屬性。實體類屬性與數(shù)據(jù)列之間的數(shù)據(jù)類型轉(zhuǎn)換是自動進行的(要求二者之間能夠進行轉(zhuǎn)換)。

        2) Operations小節(jié):定義實體類的擴展方法(除CURD之外的數(shù)據(jù)操作方法)。CRUD(creat/add, read, update, delete)操作為實體類的默認操作[8],Operations中定義的是更復(fù)雜的操作:如多表更新、查詢以及使用存儲過程的操作等,支持單數(shù)據(jù)集以及多數(shù)據(jù)集的數(shù)據(jù)填充。其中name標識操作的名稱,具備唯一性。Param小節(jié)中的name對應(yīng)sql中的參數(shù)名稱或占位標識符,propertyname則表示若未給定參數(shù)時對應(yīng)實體類的屬性名。Result小節(jié)僅在返回多結(jié)果集時使用,index為返回的記錄集順序,propertyname為對應(yīng)的實體類屬性名。

        2對象存取器的設(shè)計與實現(xiàn)

        對象存取器負責實體類與數(shù)據(jù)庫的交互任務(wù),包括數(shù)據(jù)的存儲以及讀取(見圖2)[9]。故此,AORM中的實體類也是有著一定的限制和要求:

        1) 實體類必須繼承自基類BaseEntity,可對應(yīng)于數(shù)據(jù)庫中的數(shù)據(jù)表、視圖以及通過SQL語句或存儲過程等方式所取得的數(shù)據(jù)集;

        2) 實體類的屬性的類型可以是實體類類型。

        3) 實體類的屬性的類型可以是集合類型(Array,List或Dictionary類型等),但是其基類型必須繼承自BaseEntity的實體類類型。

        對象的數(shù)據(jù)存取主要通過基類BaseEntity實現(xiàn),并且所有的操作都有著共同的操作步驟:

        1) 獲取操作適配器名稱。一般有3種途徑:參數(shù)進行指定、類實例通過屬性DataProviderName進行設(shè)置以及在實體類定義中通過類的特性進行設(shè)定。

        2) 獲取關(guān)系映射信息。根據(jù)已經(jīng)取得的適配器名稱取得適配器配置信息(DataProviderConfiguration),然后根據(jù)傳入的泛型或當前實體類類型以及映射文件存放基礎(chǔ)路徑(TemplatePath)調(diào)用映射管理器中的LoadMapping方法獲取映射關(guān)系信息。若映射文件不存在,并且預(yù)先設(shè)定了tablename,則會自動從數(shù)據(jù)庫中獲取數(shù)據(jù)列信息,調(diào)用BuildMapping方法生成關(guān)系映射文件。

        圖2AORM對象存取器

        3) 取得結(jié)果:將已經(jīng)取得的適配器配置信息作為參數(shù)調(diào)用數(shù)據(jù)庫適配器工廠類(DatabaseProviderFactory,見圖3)的GetDatabaseProvider方法獲取具體的適配器(實現(xiàn)了IDatabaseProvider接口并操作具體種類數(shù)據(jù)庫的適配器,如圖3中的MSSQLDatabaseProvider、MySQLDatabaseProvider、OracleDatabaseProvider等),然后根據(jù)映射文件中的操作定義調(diào)用CreateCommand方法生成具體的Command,之后再根據(jù)具體的操作要求調(diào)用不同的方法取得相應(yīng)的返回結(jié)果。

        4) 實體類數(shù)據(jù)填充:根據(jù)已取得的數(shù)據(jù)結(jié)果以及實體類屬性關(guān)系映射信息,利用C#的反射機制進行數(shù)據(jù)填充,然后將填充后的對象返回。

        數(shù)據(jù)操作分為基本操作以及擴展操作2大類[10]。其中基本操作包括Add,Save(含一個重載函數(shù)),Delete(含一個重載函數(shù))共5個操作,擴展操作包括GetData,GetList以及Execute共3個操作,所有操作中的object類型參數(shù)均為匿名類型,格式為鍵值對,用于指定參數(shù)名稱以及相應(yīng)的值。

        3數(shù)據(jù)庫適配器的設(shè)計與實現(xiàn)

        數(shù)據(jù)庫適配器的主要目的是實現(xiàn)實體類以及實體類的數(shù)據(jù)操作,與具體的數(shù)據(jù)庫及數(shù)據(jù)庫類型分離,使得實體類以及與實體類的相關(guān)操作具備數(shù)據(jù)庫無關(guān)性以及數(shù)據(jù)庫類型無關(guān)性[11],并且將所有與數(shù)據(jù)庫直接交互的操作均放到映射文件中進行定義,避免在代碼中出現(xiàn)SQL語句,提高用戶系統(tǒng)的可維護性以及適用性等。事務(wù)的支持也是數(shù)據(jù)庫適配器所必須具備的[12]。

        如圖3所示,數(shù)據(jù)庫適配器通過一個適配器操作接口IDatabaseProvider以及一個適配器配置信息DataProviderConfiguration實現(xiàn)了多數(shù)據(jù)庫的支持,同時也提供了一個數(shù)據(jù)庫事務(wù)支持對象DatabaseTransaction用于數(shù)據(jù)庫事務(wù)操作。不同的數(shù)據(jù)庫適配器均實現(xiàn)了IDatabaseProvider接口,用戶可以根據(jù)給定的操作條件執(zhí)行數(shù)據(jù)庫操作,使得用戶可以無視具體的數(shù)據(jù)庫種類,將具體的細節(jié)完全交與適配器進行完成。同時,適配器也提供了直接執(zhí)行SQL語句的操作,使得適配器可以脫離AORM單獨進行使用。

        數(shù)據(jù)庫適配器的接口函數(shù)CreateCommand用于生成符合數(shù)據(jù)庫自身規(guī)則的SQL命令對象,有效地解決了多類型數(shù)據(jù)庫的支持要求。

        圖3數(shù)據(jù)庫適配器

        4結(jié)束語

        針對現(xiàn)行ORM軟件的諸多缺點,從如何提高軟件的開發(fā)效率、降低軟件的復(fù)雜程度等方面作為出發(fā)點,以C#為開發(fā)環(huán)境,設(shè)計了一個基于XML配置的、可自動建立數(shù)據(jù)庫與實體類映射關(guān)系的、支持多種數(shù)據(jù)庫類型的AORM持久型框架。目前,AORM持久層框架已成功應(yīng)用于美國某大型法律法規(guī)網(wǎng)站系統(tǒng),一個站點同時提供了20多個州的法律法規(guī)站點服務(wù)(每個州均有一個后臺數(shù)據(jù)庫,結(jié)構(gòu)不盡相同),就系統(tǒng)開發(fā)人員反饋以及目前網(wǎng)站的運行情況來說,達到了預(yù)期的要求和目標。

        參考文獻:

        [1] 張小鵯. 面向?qū)ο蠓治龇椒ǖ木C述[J]. 甘肅科技, 2010 (2): 44-47.

        [2] 王永誠, 蘇逸倫. 深入淺出談ORM [J]. 中華技術(shù), 2010 (88): 108-115.

        [3] Mata-Toledo R, Monger M. Utilizing the ADO. NET entity framework in database courses[J]. Journal of Computing Sciences in Colleges, 2011, 26(3): 93-97.

        [4] 盧小垂. 基于. Net 平臺的 ORM 輕量級開發(fā)框架的設(shè)計與實現(xiàn)[J]. 電信快報: 網(wǎng)絡(luò)與通信, 2012 (10): 10-16.

        [5] 李杰. 基于 ORM 的輕量級數(shù)據(jù)持久化技術(shù)研究及應(yīng)用[J]. 計算機科學(xué), 2010, 37(9): 190-193.

        [6] Zhang Z Y, Chang S G, Ding T F. Research on the Dynamic Integrating with Heterogeneous Database System Based XML and Hibernate[J]. Applied Mechanics and Materials, 2013(263): 1717-1720.

        [7] Pop D P. Designing An Object Relation Mapping System In Php[J]. Journal of Information Systems & Operations Management, 2011, 5(1): 207-212.

        [8] 梁伍七. Hibernate 中關(guān)聯(lián)關(guān)系映射策略研究與實現(xiàn)[J]. 安徽廣播電視大學(xué)學(xué)報, 2012 (3): 117-120.

        [9] 譚瑩宇. 基于 Hibernate JPA 和 JQuery 框架的數(shù)據(jù)查詢研究與實現(xiàn)[J].計算機與現(xiàn)代化, 2012 (1): 196-198.

        [10] Troelsen A. Type Reflection, Late Binding, and Attribute-Based Programming[M].Pro C# 5.0 and the. NET 4.5 Framework. Apress, 2012: 555-598.

        [11] 張美玲. 增量預(yù)取技術(shù)在持久化框架中的研究與應(yīng)用[D]. 青島:中國海洋大學(xué), 2010.

        [12] Cain III H W, Dillenberger D N, Hack M H T, et al. Database system transaction management: U.S. Patent Application 13/435,281[P]. 2012-3-30.

        Design and Implementation of AORM Persistence Layer Framework

        LI Chun-mei

        (School of Information Engineering, Anhui Xinhua University, Hefei 230088, China)

        Abstract:Aiming at the disadvantages of traditional ORM(object-relational mapping) framework such as high cost and difficult to control, combined with the actual process of software development requirements, a AORM (adaptive object-relational mapping) persistence framework was proposed. This framework is based on the reflection mechanism in C#, considering the specific requirements at actual software development process, combined with the grammatical features of multiple database types, established the persistence framework, which integrates the XML-relation mapping files and auto-relational mapping method. Compared with the traditional ORM framework, the application-independent SQL statements is the biggest feature, and very beneficial to adjust and optimize the database structure.

        Key words:AORM, ORM, object-relational mapping, multiple database types, data persistence

        中圖分類號:TP319

        文獻標識碼:A

        文章編號:1007-4260(2015)01-0071-05

        DOI:10.13757/j.cnki.cn34-1150/n.2015.01.020

        作者簡介:李春梅, 女, 安徽滁州人, 碩士,安徽新華學(xué)院信息工程學(xué)院講師,主要研究方向為計算機軟件技術(shù)。

        收稿日期:2014-07-09

        国产精品国产三级国产在线观| 99精品国产一区二区| 无码人妻精品一区二区三区免费| 国产精品无码久久久久久久久作品| 少妇久久一区二区三区| 日韩综合无码一区二区 | 中文字幕无码免费久久9| 日韩人妖干女同二区三区| 亚洲精品国精品久久99热| 国产精品福利视频一区| 国产亚洲欧洲三级片A级| 国产91在线播放九色快色| 成人中文乱幕日产无线码| 国产精品麻豆aⅴ人妻| 国产精品亚洲A∨无码遮挡| 日本精品一级二区三级| 把女的下面扒开添视频| 91精品一区国产高清在线gif| 国产粉嫩美女一区二区三| 日本a级一级淫片免费观看| 鸭子tv国产在线永久播放| 97色在线视频| 精品国产3p一区二区三区| 免费毛儿一区二区十八岁| 中文字幕亚洲情99在线| 国产丝袜免费精品一区二区| 蜜桃网站入口可看18禁| 亚洲欧美日韩另类精品一区| 亚洲国产av一区二区三区四区 | 国产a在亚洲线播放| 四虎影视永久在线精品| 中文字幕亚洲乱亚洲乱妇| 少妇被粗大进猛进出处故事| 精品深夜av无码一区二区| 女同av在线观看网站| 精品国产一区二区三区a| 最近2019年好看中文字幕视频| av中文字幕综合在线| av大片网站在线观看| 国产精品日本一区二区在线播放 | 亚洲一区二区三区中文视频|