国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

數(shù)據(jù)庫開發(fā)框架NHibernate應(yīng)用研究

2013-09-17 10:31:26崔玉連楊新鋒
微型電腦應(yīng)用 2013年9期
關(guān)鍵詞:辦稅全程組件

崔玉連,楊新鋒

0 引言

面向數(shù)據(jù)集的開發(fā)模式和面向?qū)ο蟮念I(lǐng)域模型是企業(yè)應(yīng)用業(yè)務(wù)邏輯組織的兩種主要模式。

在面向數(shù)據(jù)集的開發(fā)模式中,系統(tǒng)開發(fā)框架提供了大量的數(shù)據(jù)感知組件使得開發(fā)者可以使用RAD組件快速開發(fā)基于DataSet的企業(yè)應(yīng)用。該模式非常適合于中小型的企業(yè)應(yīng)用程序開發(fā),但是應(yīng)對復(fù)雜的應(yīng)用程序,隨著業(yè)務(wù)邏輯復(fù)雜度的增加其缺點(diǎn)就會逐步顯現(xiàn)。

首先,使用RAD和數(shù)據(jù)感知組件,就意味數(shù)據(jù)表現(xiàn)層同數(shù)據(jù)庫表的緊偶合,任何對數(shù)據(jù)模型的改變都會導(dǎo)致對所有綁定到改動的表或字段的數(shù)據(jù)感知組件的修改。其次,使用數(shù)據(jù)感知組件,意味著同數(shù)據(jù)庫的特有特性的耦合,當(dāng)向不同數(shù)據(jù)庫平臺移植時,需要重新編寫大量的業(yè)務(wù)邏輯[1]。

因此,使用面向?qū)ο蟮钠髽I(yè)應(yīng)用開發(fā)框架來進(jìn)行系統(tǒng)的開發(fā)越來越得到開發(fā)者的重視。但是由于對象和關(guān)系模型之間存在“阻抗不匹配”問題[2],因此把面向?qū)ο蟮囊恍┎僮饔成涞疥P(guān)系數(shù)據(jù)庫時,需要編寫繁瑣的數(shù)據(jù)訪問代碼,而這些代碼總是有大量重復(fù)內(nèi)容。一旦數(shù)據(jù)層發(fā)生變化,就需要修改業(yè)務(wù)層的代碼來適應(yīng)數(shù)據(jù)層的變化,導(dǎo)致系統(tǒng)難以維護(hù)。

開發(fā)人員試圖采用對象—關(guān)系映射 (ORM,Object Relational Mapping)組件來解決上述問題,即在業(yè)務(wù)層和數(shù)據(jù)層之間添加一個組件,將面向?qū)ο缶幊趟⒌膶ο笤跀?shù)據(jù)庫中做一個映射,使之和數(shù)據(jù)庫中的表建立對應(yīng)關(guān)系,把對表的直接操作變?yōu)閷︻惖膶傩院头椒ǖ牟僮鱗3]。用戶不需要為每個類編寫數(shù)據(jù)訪問代碼,把開發(fā)人員從重復(fù)的勞動中解脫出來,使之有更多時間和精力關(guān)注實(shí)際業(yè)務(wù)需求,從而提高系統(tǒng)的開發(fā)效率。

1 NHibernate

NHibernate是基于.NET的ORM開源框架,是來源于非常優(yōu)秀的基于Java的 Hibernate關(guān)系型持久化工具。NHibernate從數(shù)據(jù)庫底層持久化.NET對象到關(guān)系型數(shù)據(jù)庫[4]。它不僅管理.NET類到數(shù)據(jù)庫表的映射,還提供數(shù)據(jù)查詢、獲取數(shù)據(jù)的方法和代碼自動生成機(jī)制,從而大幅度地減少開發(fā)人員直接使用SQL和ADO.NET處理數(shù)據(jù)的時間,擺脫了SQL、ADO.NET和事務(wù)、緩存等底層。

1.1 NHibernate的特性

NHibernate具有以下特性:

對象持續(xù)性:能夠管理.Net類到數(shù)據(jù)庫表的映射,以對象的方式存取數(shù)據(jù),支持復(fù)雜對象、復(fù)合對象,支持對象之間的關(guān)聯(lián)。OR Mapping的定義都是基于XML,具有很好的擴(kuò)展性和通用性。可以支持現(xiàn)有的數(shù)據(jù)庫定義,很好地保護(hù)用戶投資。

支持對象查詢:提供了面向?qū)ο蟮牟樵冋Z言(HQL和條件查詢),可以根據(jù)條件查詢復(fù)合對象以及對象集合。

支持事務(wù):創(chuàng)建還必須支持悲觀鎖的事務(wù),并提供了樂觀鎖的并發(fā)支持。

性能優(yōu)化:允許用戶使用定制的Sql來提高查詢的性能,提供了多種SQL自動策略開關(guān),使得框架生成的Sql語句具有非常優(yōu)化的性能。提供了靈活的Cache緩沖機(jī)制,以及延遲加載,批量更新的策略,保證一般應(yīng)用的性能不會低于相應(yīng)的數(shù)據(jù)集應(yīng)用。

數(shù)據(jù)庫平臺無關(guān)性:使用OR Mapping技術(shù)實(shí)現(xiàn)了數(shù)據(jù)庫平臺無關(guān)性,可以隨時切換開發(fā)及數(shù)據(jù)庫發(fā)布平臺,方便移植。

1.2 NHibernate的體系結(jié)構(gòu)

NHibernate的體系結(jié)構(gòu),如圖1所示:

圖1 NHibernate體系結(jié)構(gòu)

采用NHibernate后,.NET的系統(tǒng)架構(gòu)仍然采用N層架構(gòu),界面層提供用戶的操作接口,業(yè)務(wù)邏輯層同傳統(tǒng)的N層架構(gòu)一樣通過調(diào)用持久層接口實(shí)現(xiàn)了所有對數(shù)據(jù)庫的操作[5]。NHibernate持久化層實(shí)現(xiàn)了應(yīng)用程序與數(shù)據(jù)庫的隔離,NHibernate會生成相應(yīng)的SQL語句實(shí)現(xiàn)與數(shù)據(jù)庫的數(shù)據(jù)交互。持久化層封裝了使對象持久化的行為,即從持久化存儲對象中讀取、寫入、刪除對象。

1.3 NHibernate的映射機(jī)制

由于關(guān)系模型主要組成成分是數(shù)據(jù)庫中的表和表與表之間的關(guān)系,而對象模型的主要組成成分是對象以及對象之間的聯(lián)系,因此為了消除對象模型與關(guān)系模型的不匹配問題,有必要在它們的組成成分間建立一個映射,這個映射包括結(jié)構(gòu)映射和關(guān)系映射。NHibernate通過XML文件實(shí)現(xiàn)對象和關(guān)系數(shù)據(jù)庫表的結(jié)構(gòu)映射和關(guān)系映射,用戶在XML文件中定義實(shí)體類和數(shù)據(jù)庫表的映射,XML文件必須以類名+.hbm.xml作為文件名[6][7]。NHibernate通過XML文件完成的映射關(guān)系,如圖2所示:

圖2 NHibernate通過XML文件完成的映射關(guān)系

2 在全程辦稅系統(tǒng)中的應(yīng)用

2.1 系統(tǒng)概述

全程辦稅及納稅評估系統(tǒng)是根據(jù)全程辦稅服務(wù)的實(shí)際情況,針對全程辦稅、指標(biāo)管理、臺帳管理、評估性管理等方面進(jìn)行信息化建設(shè),初步建立起一個高集成度、高共享性的現(xiàn)代全程辦稅管理信息系統(tǒng),為全程辦稅質(zhì)量和效率的提高、評估管理的規(guī)范,提供了一個強(qiáng)大、持久、穩(wěn)定的技術(shù)平臺。本系統(tǒng)共包括和全程辦稅服務(wù)的記錄與監(jiān)督、科室與個人的指標(biāo)性管理、納稅臺帳管理、評估性管理、管理五大模塊。本系統(tǒng)采用C#語言開發(fā)基于C/S架構(gòu)的分布式信息管理系統(tǒng)。其中,NHibernate作為數(shù)據(jù)持久層來封裝對數(shù)據(jù)庫的操作。

2.2 系統(tǒng)總體框架

依據(jù)系統(tǒng)設(shè)計強(qiáng)內(nèi)聚、弱耦合的原則,以及劃分功能模塊要求設(shè)計簡單、權(quán)限分配方便,便于用戶理解的原則,本系統(tǒng)采用了4層架構(gòu),如圖3所示:

圖3 基于Nhibernate的全程辦稅及納稅評估系統(tǒng)框架

本系統(tǒng)的4層框架分別為:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和數(shù)據(jù)存儲層。其中,表示層利用C#進(jìn)行編程,實(shí)現(xiàn)用戶界面;業(yè)務(wù)邏輯層封裝了全程辦稅的業(yè)務(wù)邏輯,通過定制業(yè)務(wù)訪問組件NHibernate,實(shí)現(xiàn)各業(yè)務(wù)邏輯模塊;數(shù)據(jù)持久層封裝了操作業(yè)務(wù)對象的持久化方法,利用Nhibernate進(jìn)行對象-關(guān)系的映射,實(shí)現(xiàn)數(shù)據(jù)的持久操作。數(shù)據(jù)存儲層即數(shù)據(jù)庫服務(wù)器,負(fù)責(zé)數(shù)據(jù)的存儲、組織和管理。

2.3 NHibernate實(shí)施步驟

(1)創(chuàng)建NHibernate數(shù)據(jù)庫連接

NHibernate數(shù)據(jù)庫連接由配置文件NHibernat.cfg.xml決定,文件中指定NHibernate所使用的數(shù)據(jù)庫以及用戶名、密碼及其他相關(guān)配置。本系統(tǒng)配置文件內(nèi)容如下:

配置文件中參數(shù)的含義,如表1所示:

表1 配置文件中參數(shù)含義

(2)創(chuàng)建對象的相應(yīng)持久化類

持久化類是指其實(shí)例需要持久化到數(shù)據(jù)庫的類。在持久化類中只定義屬性和屬性相對應(yīng)的get、set方法,屬性和數(shù)據(jù)庫表的字段一一對應(yīng)。

(3)創(chuàng)建映射文件

每個數(shù)據(jù)庫表對應(yīng)一個NHibernate映射文件(命名格式為*.hbm.xml),用于生成數(shù)據(jù)模型。在映射文件中,需要定義數(shù)據(jù)存儲到哪個數(shù)據(jù)庫表,哪個屬性映射到數(shù)據(jù)庫表中的哪個列字段,不同的對象如何相互關(guān)聯(lián)。

具體來說,xml文件中的Class元素的name屬性指定了要進(jìn)行映射的類的名稱, table屬性指定了要進(jìn)行映射的類在數(shù)據(jù)庫中進(jìn)行持久存儲的庫表名稱。Id元素用于聲明類標(biāo)識屬性對應(yīng)于數(shù)據(jù)庫表的主鍵字段的映射關(guān)系,其中name屬性標(biāo)識類的標(biāo)識屬性名稱,column屬性標(biāo)識持久存儲的庫表的主鍵字段的名稱,type是標(biāo)識字段的數(shù)據(jù)類型,而內(nèi)嵌的generator元素則指明主鍵字段唯一值的生成方法,若其值為identity則表示NHibernate使用Sql Server數(shù)據(jù)庫本身提供的自增加字段的特性來保證鍵值唯一。

在運(yùn)行過程中,NHibernate根據(jù)映射文件生成各種SQL語句。

(4)持久化操作的實(shí)現(xiàn)

建立映射文件和持久化類之后,可以很容易地實(shí)現(xiàn)針對單個持久類對象所有的基本操作,包括添加、刪除、更新和查找等。其基本過程為:

①加入NHibernate.dll的引用:

using NHibernate;

using Nhibernate.Cfg;

②創(chuàng)建configuration對象:

Configuration cfg=new Configuration();

cfg.AddAssembly("MyAssembly");

③創(chuàng)建會話對象通過調(diào)用Configuration對象的BuildSession-Factory方法創(chuàng)建SessionFactory對象,將Configuration對象包含的配置信息和SessionFactory發(fā)生關(guān)聯(lián);然后通過調(diào)用SessionFactory對象的OpenSession方法創(chuàng)建Session對象,Session對象提供到后臺數(shù)據(jù)庫的鏈接;接著再通過調(diào)用Session對象的BeginTransaction方法創(chuàng)建可以被NHibernate管理的事務(wù)。

④加載、保存、查詢對象。通過調(diào)用ISessionFactory實(shí)例的openSession方法創(chuàng)建Session實(shí)例,最后通過Session接口的 save()、update()、delete()、load()和 find()等方法完成對數(shù)據(jù)庫對應(yīng)表的操作,完成對持久對象類數(shù)據(jù)的存取。

⑤提交事務(wù)并關(guān)閉會話。

2.4 實(shí)施效果

實(shí)踐表明,由于本系統(tǒng)采用了HNibernate實(shí)現(xiàn)對象-關(guān)系的映射,在對象檢索方式上節(jié)約了大量的資源,尤其當(dāng)系統(tǒng)中進(jìn)行大量數(shù)據(jù)查詢時尤為明顯。同時由于引入對象-關(guān)系映射技術(shù),開發(fā)人員可以采用面向?qū)ο蟮姆椒▉碓O(shè)計應(yīng)用系統(tǒng),用戶更改后臺數(shù)據(jù)庫也不會導(dǎo)致程序的修改,只需要對配置文件進(jìn)行簡單的修改,從而降低程序維護(hù)和更新的成本,大大縮短了開發(fā)時間,提高了程序的可靠性。而且由于采用NHibernate實(shí)現(xiàn)了數(shù)據(jù)存儲和業(yè)務(wù)邏輯的分離,使得對各層進(jìn)行獨(dú)立開發(fā)、跟蹤及優(yōu)化成為了可能。

3 總結(jié)

由于NHibernate的設(shè)計集成了很多操作數(shù)據(jù)庫方面的有效經(jīng)驗(yàn),對生成的SQL語句進(jìn)行最大限度的優(yōu)化,可以高效地利用ADO.NET操作數(shù)據(jù)庫。但是,NHibernate也存在一些明顯的缺點(diǎn)與不足:為了實(shí)現(xiàn)對象與關(guān)系模型之間的映射,需要編寫復(fù)雜的XML映射文件且容易出錯;需要學(xué)習(xí)HQL語言,增加學(xué)習(xí)成本;NHibernate具有較大的靈活性,體系結(jié)構(gòu)比較復(fù)雜,使用難度大;不支持存儲過程、不具備事務(wù)處理等數(shù)據(jù)庫高級功能[8]。這些都需要我們進(jìn)一步研究和探討。

[1]陳省.NHibernate之Hello NHibernate[J].電腦編程技巧與維護(hù),2004,10:42-45.

[2]劉金,徐蘇,馮豫華.基于Hibernate的J2EE數(shù)據(jù)持久層的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)與現(xiàn)代化,2007,23(4):56-58.

[3]趙廣利.基于 NHibernate的數(shù)據(jù)持久化方案[J].計算機(jī)工程,2009,35(20):53-55.

[4]秦澤葉,高改梅.NHibernate在實(shí)驗(yàn)室信息管理系統(tǒng)中的應(yīng)用研究[J].科學(xué)之友,2010,10:40,43.

[5]李昕.NHibernate在.NET中的應(yīng)用[J].福建電腦,2009,4:28,20.

[6]劉偉,嚴(yán)暉.利用NHibernate開發(fā)與數(shù)據(jù)庫無關(guān)的系統(tǒng)[J].計算機(jī)技術(shù)與發(fā)展,2007,17(7):105-107.

[7]陳龍.基于.NET平臺ORM 技術(shù)-NHibernate的研究與應(yīng)用[D].長春:長春理工大學(xué),2006.

[8]徐長盛,戴超,謝立.J2EE數(shù)據(jù)持久化技術(shù)的研究[J].計算機(jī)應(yīng)用與軟件,2006,23(4):56-58.

猜你喜歡
辦稅全程組件
無人機(jī)智能巡檢在光伏電站組件診斷中的應(yīng)用
能源工程(2022年2期)2022-05-23 13:51:50
拓展非接觸式辦稅的基層實(shí)踐與設(shè)想
全程“錄像”,寫觀察日記
全程管控在機(jī)電工程設(shè)備安裝的實(shí)施
新型碎邊剪刀盤組件
U盾外殼組件注塑模具設(shè)計
億企贏“最牛辦稅員”活動結(jié)束 河北辦稅員百強(qiáng)榜公布
河北國稅開設(shè)“云辦稅廳”助力“營改增”
手工制鞋全程LOOK
Coco薇(2015年1期)2015-08-13 02:22:23
風(fēng)起新一代光伏組件膜層:SSG納米自清潔膜層
太陽能(2015年11期)2015-04-10 12:53:04
江口县| 西畴县| 天峻县| 岢岚县| 天台县| 鄂伦春自治旗| 无锡市| 永仁县| 乾安县| 金川县| 怀柔区| 绍兴市| 深圳市| 永昌县| 常山县| 无棣县| 南溪县| 会东县| 蓬溪县| 封开县| 阳谷县| 泰兴市| 宝清县| 建平县| 深水埗区| 绵阳市| 杭锦旗| 泾阳县| 新郑市| 广西| 蚌埠市| 微博| 商城县| 汉阴县| 图们市| 建瓯市| 沁水县| 油尖旺区| 桐庐县| 虹口区| 原平市|