基于NHibernate和XML通用查询技术研究

时间:2023-06-13 10:42:03 公文范文 来源:网友投稿

作者简介:杨旭(1981-),男,本科,工程师,研究方向:面向数据库的软件开发。

摘要:使用NHibernate作为数据库持久层,充分发挥其在多表映射、数据操作、连接池管理等方面的优势;同时,使用相当于JDBC和SQL封装的工具来操作数据库,大大减少操作数据库的工作量;使用XML来描述表结构、业务结构以及业务与实际数据库的的关联,来解决系统的可扩展性和易移植性。采用SOA(面向服务)思想来设计系统的层次架构,使系统可以快速集成到不同的平台。

关键词:通用查询;NHibernate;XML;SOA

中图分类号:TP 文献标识码:A文章编号:1672-3198(2011)05-0255-02

1 引言

目前油田的数据库建设已经初具规模,建设数字油田的理念正在深入人心,要做到数字油田就需要将油田目前所有的数据都能够进行展示,因此基于数据库的通用查询成为油田必不可少系统功能之一。

2 现状分析

目前胜利油田的大型数据库主要有勘探库、开发库以及三级单位的项目库。其中勘探库全面反映油田40多年来勘探生产成果,包括物探、录井、测井、试油、分析化验、储量、综合研究等数据。共计数据表331个,视图53个,数据项10542个,数据记录数18512146项,日增记录数15811条。开发库、项目库的数据表相对少,但是数据项也是海量的。因此,胜利油田大型数据库的特点是:数据库软件使用不同(主要有oracle、SQLServer、MySql等);数据表、视图比较多;数据量大。

以往的针对特定数据项的查询系统一般采用ADO.NET、ODBC直连的方式。采用这种方式的数据访问,访问效率高,代码通俗简单,但是软件与数据库的绑定比较紧密,数据库的变化都需要系统进行一次系统更新,这些变化包括数据库连接的变化、数据表字段的变化、表逻辑关系的变化等等。这种系统设计与数据表访问量少、业务字段固定的小型应用系统能较好的满足要求,然而,如果是面对大型的数据库访问系统就显得非常笨拙。因此,需要能够提供针对多数据表连接、大数据访问量、易移植性、易扩充性的解决方案。

3 功能设计

通用查询系统需要包含的主要功能有:

(1)多数据库同时连接:用户需要访问的数据是面向业务的,而这些业务在数据库中是以不同的数据库进行存放的,因此,系统应该能够同时展示不同数据库的数据。

(2)多种数据组织方式:用户可以按照数据库中物理表和视图的方式查询数据,同时也可以根据自己的业务逻辑来定制组织显示数据,同时,业务逻辑可能分为不同的数据组织方式。

(3)基于主键的快速过滤和查询:任何数据表的查询应该是基于数据库中主键的快速定位以及其他字段的详细查询。

(4)通用查询语句的构建:即使是不懂SQL语句的用户可以通过系统提供的SQL语句构建界面来构建自己需要的SQL语句。

(5)需要考虑系统在未来的可移植性、可扩展性和SOA思想的实施。

4 NHibernate关键技术点

4.1 NHibernate中的实体类和映射文件

NHibernate是一个面向.NET环境的对象/关系数据库映射工具。NHibernate不仅仅管理.NET类到数据库表的映射(包括.NET数据类型到SQL 数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和ADO.NET处理数据的时间。

NHibernate的基本用法是:在应用程序(Application)中创建的临时对象(Transient objects);接着应用程序和NHibernate进行对话(Session,事先需要先由SessionFactory创建Session),告知NHibernate需要进行的持久化请求;NHibernate根据配置文件(XML Mapping和app.config)把持久化操作转化为相应的数据库操作,调用相应的ADO.Net API执行数据库操作。

NHibernate中的实体类和映射文件是面向对象设计与关系型数据库的桥梁,系统是通过它们对面向对象和关系型数据库进行解耦。实体类和映射文件一般采用代码生成器来生成,这里我们使用了MyGerneration。考虑到NHibernate对实体类的类型和映射文件有特殊的要求,在MyGerneration提供的NHibernate类型代码中需要进行一定的修改,才能满足真正的需要。

4.2 NHibernate配置文件和实际操作

NHibernate的描述文件可以是一个properties属性文件,也可以是一个xml文件。在Hibernate.cfg.xml中既可以配置JDBC,也可以配置JNDI。Hibernate的配置文件可以进行c3p0连接池、proxool连接池、dbcp连接池等连接池的配置。NHibernate连接配置支持的数据库主要包括:MySql、Sql Server和Oracle。

NHibernate在访问数据前要先建立连接。按照以下步骤来进行:

(1)初始化Configuration,Configuration confignew Configuration();

(2)配置Configuration对象;

(3)获取ISessionFactory对象ISessionFactory sessionFactory config.BuildSessionFactory();

(4)开始一个会话ISession sessionsessionFactory.OpenSession();

(5)使用提供的Find、CreateQuery、CreateSQLQuery、CreateCriteria、Update、Delete等方法进行数据操作。

5 基于XML的业务模型

Xml是一个基于文本的格式,使用类似于HTML的标记来结构化数据。Xml具有开放性、简单性、自我描述性、互操作性、可扩展性等优势。使用XML描述业务与数据库之间的关联,可以最大限度的的减少数据库的变化对于系统带来的改动。

本系统要求数据按照数据库、业务逻辑两条主线来组织数据,因此采用XMl来描述数据的组织以及数据表的字段定制。如下XML所示,为数据组织方式的简单示意:

<生产管理>

<地震队日报数据表TableName“test01”>

<地震队周报原始数据表TableName“test02”>

6 系统设计

基于SOA思想,将系统的每层都作为服务为上层提供服务,系统架构总共分三层:底层数据库:该层主要是指各类数据库。数据服务层:该层由两部分组成,其中NHibernate层主要由NHibernate的框架组成,完成数据库到实体对象的映射,以及使用NHibernate进行数据的连接和数据查询。其上还有DataService接口层,该层依托业务实体XML文件完成从简单的实体对象到业务对象的映射,为数据应用层提供业务数据。应用界面层:该层只提供软件的实际展示,采用Weifenluo的Winfrom组件,来更灵活的管理UI界面。

7 结束语

系统依托NHibernate数据持久层和Weifenluo软件UI设计组件,以XML描述业务逻辑和数据库字段的定制,使得系统以更符合SOA思想的结构出现,系统具备了更好的易开发性、易扩展性和易移植性。

参考文献

[1]Stewart Fraser,Steven Livingstone. C#XML入门经典[M]. 北京:清华大学出版社.2003.

[2]Eric Freeman,Elisabeth Freeman,Kathy Sierra,Bert Bates.Head First设计模式C#版[M].北京:中国电力出版社,2007.

[3]Pirrre Hei Kuate,Tobin Harris,Christian Bauer,Gavin King. Hibernate in Action [M].MANNING.2009.

推荐访问:技术研究 通用 查询 NHibernate XML