admin 管理员组

文章数量: 1184232


2024年3月28日发(作者:sedex认证)

MicrocomputerApplications Vo1.29,No.9,2013 

文章编号:1007-757X(2013)9—0012.03 

研究与设计 微型电脑应用 2013年第29卷第9期 

数据库开发框架NHibernate应用研究 

崔玉连,杨新锋 

摘要:NHibernate是.NET平台的一个对象持久化工具,它所提供的对象一关系映射(ORM)机制能够很好地解决对象与 

关系模型不匹配的问题。介绍了NHibernate的特性,分析了NHibernate的体系结构和映射机制,结合全程办税管理系统对 

NHibernate的实际应用进行了研究,结果表明利用该工具能够提高系统的扩展性、可维护性和应用系统的开发效率。 

关键词:NHibernate;对象关系映射;数据持久化 

中图分类号:TP31l 文献标志码:A 

Research on Application of Database Development Framework NHibernate 

CuiYulian,YangXinfeng 

(School ofComputer and Information Engineering,Nanyang Institute ofTechnology,Nanyang 473004,China) 

Abstract:NHibemate is an object persistence tool of.NET platform,the object relational mapping(ORM)mechanism it provided 

can solve the problem of object and relational model matching.This paper introduces het characteristics of NHibemate,Analysis the 

architecture and the mapping mechanism of NHibemate,combined with the full tax management system on NHibernate practical 

application were studied,the results show that using the tool can improve the system scalability,maintainability and development 

eficiency of fapplication system. 

Keywords:NHibernate;Object Relational Mapping;Data Persistence 

0引言 

面向数据集的开发模式和面向对象的领域模型是企业 

应用业务逻辑组织的两种主要模式。 

在面向数据集的开发模式中,系统开发框架提供了大量 

的数据感知组件使得开发者可以使用RAD组件快速开发基 

于DataSet的企业应用。该模式非常适合于中小型的企业应 

用程序开发,但是应对复杂的应用程序,随着业务逻辑复杂 

度的增加其缺点就会逐步显现。 

首先,使用RAD和数据感知组件,就意味数据表现层同 

数据库表的紧偶合,任何对数据模型的改变都会导致对所有 

绑定到改动的表或字段的数据感知组件的修改。其次,使用 

解脱出来,使之有更多时间和精力关注实际业务需求,从而 

提高系统的开发效率。 

1 NHibernate 

数据感知组件,意味着同数据库的特有特性的耦合,当向不 

同数据库平台移植时,需要重新编写大量的业务逻辑[11。 

因此,使用面向对象的企业应用开发框架来进行系统的 

开发越来越得到开发者的重视。但是由于对象和关系模型之 

间存在“阻抗不匹配”问题_2],因此把面向对象的一些操作映 

射到关系数据库时,需要编写繁琐的数据访问代码,而这些 

代码总是有大量重复内容。一旦数据层发生变化,就需要修 

改业务层的代码来适应数据层的变化,导致系统难以维护。 

开发人员试图采用对象~关系映射(ORM,Object 

Relational Mapping)组件来解决上述问题,即在业务层和数 

据层之间添加一个组件,将面向对象编程所建立的对象在数 

据库中做一个映射,使之和数据库中的表建立对应关系,把 

对表的直接操作变为对类的属性和方法的操作_3】。用户不需 

要为每个类编写数据访问代码,把开发人员从重复的劳动中 

NHibernate是基于.NET的ORM开源框架,是来源于 

非常优秀的基于Java的Hibernate关系型持久化工具。 

NHibemate从数据库底层持久化.NET对象到关系型数据库 

它不仅管理.NET类到数据库表的映射,还提供数据查 

询、获取数据的方法和代码自动生成机制,从而大幅度地减 

少开发人员直接使用SQL和ADO.NET处理数据的时间, 

摆脱了SQL、ADO.NET和事务、缓存等底层。 

1.1 NHibernate的特性 

NHibernate具有以下特性: 

对象持续性:能够管理.Net类到数据库表的映射,以对 

象的方式存取数据,支持复杂对象、复合对象,支持对象之 

间的关联。ORMapping的定义都是基于XML,具有很好的 

扩展性和通用性。可以支持现有的数据库定义,很好地保护 

用户投资。 

支持对象查询:提供了面向对象的查询语言(HQL和 

条件查询),可以根据条件查询复合对象以及对象集合。 

支持事务:创建还必须支持悲观锁的事务,并提供了乐 

观锁的并发支持。 

性能优化:允许用户使用定制的Sql来提高查询的性能, 

提供了多种SQL自动策略开关,使得框架生成的Sql语句 

具有非常优化的性能。提供了灵活的Cache缓冲机制,以及 

基金项目:河南省科技重点攻关项目(072102210061) 

作者简介:崔玉连(1980.),女(汉),河南省唐河县人,南阳理工学院计算机与信息工程学院,硕士,助理实验师,研究方向:计算机实验教学 

与研究,南阳,473004 

杨新锋(1979.),男(汉),河南省内乡县人,南阳理工学院计算机与信息工程学院,硕士,副教授,研究方向:计算机教学与研究, 

南阳,473004 

・12・ 

MicrocomputerApplications Vo1.29,No.9,2013 研究与设计 微型电脑应用 2013年第29卷第9期 

延迟加载,批量更新的策略,保证一般应用的性能不会低于 

相应的数据集应用。 

数据库平台无关性:使用OR Mapping技术实现了数据 

库平台无关性,可以随时切换开发及数据库发布平台,方便 

移植。 

1.2 NHibernate的体系结构 

NHibernate的体系结构,如图1所示: 

模块。本系统采用C≠≠语言开发基于C/S架构的分布式信息 

管理系统。其中,NHibemate作为数据持久层来封装对数 

据库的操作。 

2.2系统总体框架 

依据系统设计强内聚、弱耦合的原则,以及划分功能模 

块要求设计简单、权限分配方便,便于用户理解的原则,本 

系统采用了4层架构,如图3所示: 

[ 

Nh拍精m椭● 

袋槲 

照务篷瓣膜 

I 自宠义埘藏 l 

I O/ItM pplulB l 

数据持久腰 

数撵存储 

图3基于Nhibemate的全程办税及纳税评估系统框架 

图1 NHibernate体系结构 

采用NHibernate后,.NET的系统架构仍然采用N层架 

构,界面层提供用户的操作接口,业务逻辑层同传统的N 

层架构一样通过调用持久层接口实现了所有对数据库的操 

作【5]。NHibernate持久化层实现了应用程序与数据库的隔 

离,NHibemate会生成相应的SQL语句实现与数据库的数 

据交互。持久化层封装了使对象持久化的行为,即从持久化 

存储对象中读取、写入、删除对象。 

1_3 NHibernate的映射机制 

由于关系模型主要组成成分是数据库中的表和表与表 

之间的关系,而对象模型的主要组成成分是对象以及对象之 

间的联系,因此为了消除对象模型与关系模型的不匹配问 

题,有必要在它们的组成成分间建立一个映射,这个映射包 

括结构映射和关系映射。NHibemate通过XML文件实现对 

象和关系数据库表的结构映射和关系映射,用户在XML文 

件中定义实体类和数据库表的映射,XML文件必须以类名 

+.hbm.xml作为文件名[6]【 。NHibernate通过XML文件完 

成的映射关系,如图2所示: 

实体类 

Ⅺ瞧皮件 

/1类名+恤舶1 

数据库袭 

本系统的4层框架分别为:表示层、业务逻辑层、数据 

持久层和数据存储层。其中,表示层利用c≠}进行编程,实 

现用户界面;业务逻辑层封装了全程办税的业务逻辑,通过 

定制业务访问组件NHibernate,实现各业务逻辑模块;数据 

持久层封装了操作业务对象的持久化方法,利用Nhibemate 

进行对象一关系的映射,实现数据的持久操作。数据存储层 

即数据库服务器,负责数据的存储、组织和管理。 

2-3 NHibernate实施步骤 

(1)创建NHibemate数据库连接 

NHibemate数据库连接由配置文件NHibernat.c龟.xml 

决定,文件中指定NHibernate所使用的数据库以及用户名、 

密码及其他相关配置。本系统配置文件内容如下: 

<?xml version=”1.0”encoding=”utf-8”?> 

<configuration> 

<cOnflgSectiOns> 

<section name=”nhibernate”ty口e=”System. 

Configuration.NameValueSectionHandler, 

System,Version=1.2.0.4000,Culture=neutral, 

PublicKeyToken=b77a5c56 1 934e089”/> 

</conflgSections> 

<nhibernate> 

属性 字段 

●t●●●● 

<add key=”hibernate.show sql”value=”true”/> 

<add 

key=”hibernate.connection.provider” 

val— 

图2 NHibem ̄e通过XML文件完成的映射关系 

He=”NHibemate.Connection.DriverConnectionProvider" 

/> 

2在全程办税系统中的应用 

2.1系统概述 

全程办税及纳税评估系统是根据全程办税服务的实际 

情况,针对全程办税、指标管理、台帐管理、评估性管理等 

方面进行信息化建设,初步建立起一个高集成度、高共享性 

的现代全程办税管理信息系统,为全程办税质量和效率的提 

高、评估管理的规范,提供了一个强大、持久、稳定的技术 

平台。本系统共包括和全程办税服务的记录与监督、科室与 

个人的指标性管理、纳税台帐管理、评估性管理、管理五大 

・13・ 

<add 

key=”hibernate.dialect” 

value=”NHibernate.Dialect.MsSql2000Dialect” 

/> 

<add 

key=”hibernate.connection.driver class” 

value=”NHibemate.Driver.SqlClientDriver¨ 

/> 

<add 

MicrocomputerApplications Vo1.29,No.9,2013 

key ”hibernate.connection.connection

string 

_

研究与设计 微型电脑应用 2013年第29卷第9期 

value=”Server=localhost;initial 

catalog=gxds_Data;uid=sa;pwd=admin” 

/> 

</nhibemate> 

</configuration> 

Configuration对象包含的配置信息和SessionFactory发生 

关联;然后通过调用SessionFactory对象的OpenSession方 

法创建Session对象,Session对象提供到后台数据库的链 

接;接着再通过调用Session对象的BeginTransaction方法 

创建可以被NHibemate管理的事务。 

ISessionFactory factory=cfg.BuildSessionFactory0; 

配置文件中参数的含义,如表1所示: 

表1配置文件中参数含义 

参数 值 

hibernate.show sql True表示向控制台输出运行中产生 

的Sql,用于调试目的 

hiber- 

nate.connection provider 

hibernate.dialect 

表示使用指定的类来提供数据库连 

接缓冲池。 

表示NHibernate方言的类名,可以 

让NHibernate使用某些特定数据厍 

平台的特性,目前NHibernate支持 

Sql Server、Oracle、Mysql、Firebird、 

Sybase、PostgreSql等数据库方言。 

hiber- 

hate.connection.drivercla 

Ado.Net的驱动类,支持SqlServer、 

Oracle、Mysql、OleDb、ODBC、 

SS 

hibernate.connection. 

connection string 

Firebird等驱动。 

对应于ADO net的连接串。 

ISession session=factory.OpenSessionO; 

ITransaction tran=session.BeginTransaction(); 

④加载、保存、查询对象。通过调用ISessionFactory实 

例的openSession方法创建Session实例,最后通过Session 

接口的save()、update()、delete()、load() ̄ll find()等方法完成 

对数据库对应表的操作,完成对持久对象类数据的存取。 

⑤提交事务并关闭会话。 

2.4实施效果 

实践表明,由于本系统采用了HNibemate实现对象一 

关系的映射,在对象检索方式上节约了大量的资源,尤其当 

系统中进行大量数据查询时尤为明显。同时由于引入埘象一 

关系映射技术,开发人员可以采用面向对象的方法来设计应 

用系统,用户更改后台数据库也不会导致程序的修改,只需 

要对配置文件进行简单的修改,从而降低程序维护和更新的 

成本,大大缩短了开发时间,提高了程序的可靠性。而H. 

于采用NHibernate实现了数据存储和业务逻辑的分离,使 

得对各层进行独立开发、跟踪及优化成为了可能。 

(2)创建对象的相应持久化类 

持久化类是指其实例需要持久化到数据库的类。在持久 

化类中只定义属性和属性相对应的get、set方法,属性和数 

据库表的字段一一对应。 

(3)创建映射文件 

每个数据库表对应一个NHibemate映射文件(命名格 

式为 .hbm.xm1),用于生成数据模型。在映射文件中,需 

耍定义数据存储到哪个数据库表,哪个属性映射到数据库表 

中的哪个列字段,不同的对象如何相互关联。 

具体来说,xml文件中的Class元素的name属性指定 

了要进行映射的类的名称,table属性指定了要进行映射的 

类在数据库中进行持久存储的库表名称。Id元素用于声明类 

标识属性对应于数据库表的主键字段的映射关系,其中 

name属性标识类的标识属性名称,column属性标识持久存 

储的库表的主键字段的名称,type是标识字段的数据类型, 

而内嵌的generator元素则指明主键字段唯一值的生成方法, 

若其值为identity则表示NHibernate使用Sql Server数据库 

本身提供的自增加字段的特性来保证键值唯一。 

在运行过程中,NHibemate根据映射文件生成各种 

SQL语 。 

(4)持久化操作的实现 

建立映射文件和持久化类之后,可以很容易地实现针对 

单个持久类对象所有的基本操作,包括添加、删除、更新和 

查找等。其基本过程为: 

加入NHibemate.dll的引用: 

using NHibernate; 

using Nhibernate.Cfg; 

3总结 

由于NHibemate的设计集成了很多操作数据库方面的 

何效经验,对生成的SQL语句进行最大限度的优化,可以 

高效地利用ADO.NET操作数据库。但是,NHibernate也存 

在一些明显的缺点与不足:为了实现对象 关系模型之问的 

映射,需要编写复杂的XML映射文件日.容易出错;需要学 

习HQL语言,增加学习成本;NHibernate具有较大的灵活 

性,体系结构比较复杂,使用难度大;不支持存储过程、 

具备事务处理等数据库高级功能 J。这 都需要我们进‘步 

研究和探讨。 

参考文献: 

[1】 陈省.NHibemate之Hello NHibernate[J].电脑编程技巧 

与维护,2004,10:42—45. 

[2] 刘金,徐苏,冯豫华.基于Hibernate的J2EE数据持 

久层的设计与实现『J].计算机与现代化,2007,23(4): 

56—58. 

[3] 赵广利.基于NHibernate的数据持久化方案【J].计算 

机工程,2009,35(20):53—55. 

[4] 秦泽叶,高改梅.NHibernate在实验室信息管理系统 

中的应用研究[J]l科学之友,2010,10:40,43. 

[5] 李昕.NHibernate在.NET中的应用[J].福建电脑,2009, 

4:28,20. 

[6] 刘伟,严晖.利用NHibemate开发与数据库无关的系 

统[J]l计算机技术与发展,2007,l7(7):105—107. 

[7] 陈龙.基于.NET平台ORM技术一NHibemate的研究 

②创建configuration对象: 

Configuration cfg=new Configuration(); 

cfg.AddAssembly(”MyAssembly”); 

③创建会话对象通过调用Configuration对象的 

BuildSession—Factory方法创建SessionFactory对象,将 

与应用[D].长春:长春理工大学,2006. 

[8] 徐长盛,戴超,谢立.J2EE数据持久化技术的研赳J]. 

计算机应用与软件,2006,23(4):56—58. 

(收稿日期:2013.07.09) 

・l4・ 


本文标签: 对象 数据库 映射 数据 系统