Spring.NET学习笔记18——整合NHibernate(基础篇) Level 300

长平狐 发布于 2012/06/11 11:55
阅读 1K+
收藏 0

NHibernate是一个基于.Net的针对关系型数据库的对象持久化(ORM)类库。NHibernate来源于非常优秀的基于Java的NHibernate关系型持久化工具。从数据库底NHibernate来持久化你的.Net 对象到关系型数据库。NHibernate为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernate自动产生SQL语句,并确保对象提交到正确的表和字段中去。

Spring.NETNHibernate提供了很好的支持与封装。Spring.Data.NHibernate.Generic.SupportSpring.Data.NHibernate.Support下的HibernateDaoSupport是Spring.NET提供的数据库访问对象(DAO)的基类,两者的却别在于对泛型的支持程度。我们以Spring.Data.NHibernate.Generic.Support.HibernateDaoSupport为例,讲解Spring.NET整合NHibernate开发。

我归纳了一下,分为三个步骤:

一、实体对象的建立及配置

二、数据访问对象建立及配置

三、业务处理层建立及配置

 

首先让我们学习一下NHibernate的实体对象的映射:我建立两个实体“用户信息”和“公司信息”。图1所示。

图1

 

Model


NHibernate要求实体必须是带有无参构造函数和带有virtual修饰的属性。两个实体的关系是双向(一对多——多对一)映射关系。

 

xxx.hbm.xml

 

以上就是实体对象与数据的映射文件,提供的配置我不详细说明,请查看NHibernate的帮助手册。

接下来,我建立数据库访问对象(DAO)层。在这里我使用了泛型Repository模式。

 

Repository

 

数据库访问对象我们可以让它继承于HibernateDaoSupport类,该类的HibernateTemplate属性我们可以通过Spring.NET从外部注入。

 

Repository.xml

 

db:provider节点是数据的连接字符串配置,我们引入xmlns:db="http://www.springframework.net/database这项命名空间便可以使用它。其中provider属性为数据库提供者的名称。以下是provider的详细情况:

名称

介绍

SqlServer-1.1

Microsoft SQL Server, provider V 1.0.5 .0 in framework .NET V1.1

SqlServer-2.0

Microsoft SQL Server, provider V 2.0.0 .0 in framework .NET V2.0

SqlServerCe-3.1

Microsoft SQL Server Compact Edition, provider V9.0.242.0

SqlServerCe- 3.5.1

Microsoft SQL Server Compact Edition, provider V 3.5.1 .0

OleDb-1.1

provider V1.0. 5000.0 in framework .NET V1.1

OleDb-2.0

provider V 2.0.0 .0 in framework .NET V2.0

OracleClient-2.0

Oracle, Microsoft provider V 2.0.0 .0

OracleODP-2.0

Oracle, Oracle provider V2.102.2.20

MySql

MySQL provider 1.0.10 .1

MySql- 1.0.9

MySQL provider 1.0.9

MySql-5.0

MySQL provider 5.0.7 .0

MySql- 5.0.8 .1

MySQL provider 5.0.8 .1

MySql-5.1

MySQL provider 5.1.2 .2

MySql- 5.1.4

MySQL provider 5.1.2 .2

MySql- 5.2.3

MySQL provider 5.2.3 .0

Npgsql-1.0

Postgresql provider 1.0.0 .0 (and 1.0.0.1 - were build with same version info)

Npgsql-2.0 -beta1

Postgresql provider 1.98.1.0 beta 1

Npgsql-2.0

Postgresql provider 2.0.0 .0

DB2- 9.0.0 -1.1

IBM DB2 Data Provider 9.0.0 for .NET Framework 1.1

DB2- 9.0.0 -2.0

IBM DB2 Data Provider 9.0.0 for .NET Framework 2.0

DB2- 9.1.0 -1.1

IBM DB2 Data Provider 9.1.0 for .NET Framework 1.1

DB2- 9.1.0 .2

IBM DB2 Data Provider 9.1.0 for .NET Framework 2.

SQLite- 1.0.43

SQLite provider 1.0.43 for .NET Framework 2.0

SQLite- 1.0.47

SQLite provider 1.0.43 for .NET Framework 2.0

SybaseAse-12

Sybase ASE provider for ASE 12.x

SybaseAse-15

Sybase ASE provider for ASE 15.x

SybaseAse-AdoNet2

Sybase ADO.NET 2.0 provider for ASE 12.x and 15.x

Odbc-1.1

ODBC provider V1.0. 5000.0 in framework .NET V1.1

Odbc-2.0

ODBC provider V 2.0.0 .0 in framework .NET V2

InterSystems.Data.CacheClient

Caché provider Version 2.0.0 .1 in framework .NET V2

 

可以根据自己的数据库选择不同的提供者名称。connectionString属性为数据库的连接字符串,这里用${xxx}的方式来表示一个占位符,因为我们经常将Spring.NET的配置文件设置为“嵌入系统资源”,这样一来在程序编译后就不能够修改,所以我们就要在应用程序配置文件中填写连接字符串,而不是在Spring.NET的配置文件中填写。

 

App.config

 

NHibernate中的Session控制取决于SessionFactorySpring.NET提供了LocalSessionFactoryObject类来统一管理SessionFactory。其中MappingAssemblies属性为实体程序集的名称,可以填写多个名称。HibernatePropertiesNHibernate的配置,dialect属性为数据库的方言,因为是SQL server 2K数据库,所以使用NHibernate.Dialect.MsSql2000Dialect proxyfactory.factory_class属性为延迟加载的代理类驱动,在NHibernate 2.1版中必须配置。hbm2ddl.auto属性为反向建立映射表的配置,我们配置为update后,NHibernate会帮我们自动根据实体的结构生成数据库中的表。

 

接下来我们看一下业务处理层。

 

UserManager

 

CompanyManager

 

代码的编写我不仔细讲,我们主要学习一下相关的配置。

 

Manager.xml

 

我们在前几篇学过AOP拦截和事务代理。Spring.NETNHibernate提供的事务代理是TransactionProxyFactoryObject。我们将改类的Target熟悉注入业务处理层的类,这样Spring.NET会为该类包装上事务。

 

最后我们写一个单元测试类,对业务层进行单元测试。

UserManagerTest

 

CompanyManagerTest

 

配置文件:

App.config

 

 

代码下载

 

数据库我没有上传,因为空间的问题。我设置了自动建表的属性,可以用来自动创建数据库表结构。

 

返回目录


原文链接:http://www.cnblogs.com/GoodHelper/archive/2009/11/18/SpringNet_NHibernate.html
加载中
返回顶部
顶部