一步步学习NHibernate(1)——NHibernate介绍

时间:2022-08-23 18:39:51

请注明转载地址:http://www.cnblogs.com/arhat

第十五章

从本章开始,老魏将给大家一起学习NHibernate这个流行的ORM框架,本来老魏想要和大家一起探讨微软的EF框架的,但是有EF框架现在版本不确定,所以老魏决定先讲NHibernate吧。本来我们学习.NET技术的基本上没有接触过框架开发,用的都是微软官方提供的技术。但是现在随着微软的开放,出现了很多开源的框架,有其是ASP.NET MVC的出现,导致很多人想把J2EE中流行的SSH框架移植到.NET平台上。但是我们主要学习是ASP.NET MVC,所以对于Java的struts我们就不在讲述了。但是对于Spring和Hibernate分别都对.NET平台进行了二次开发,推出了Spring.NET和NHibernate的.NET版本,所以老魏觉得这两个在JAVA中盛行的框架值得我们的学习,而且由于都是开源的,所以我们可以学到很多的知识。

这里呢,老魏有其要说明一点的是,我们学习Spring.NET,NHibernate这两个框架并不是让大家成为“框架奴”,而是让大家知道有些优秀的框架可以帮助我们快速的开发项目,当然更要的是我们从中可以学到框架的很多原理是知识,这才是我们的重点。

什么是NHibernate?NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object /relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

一步步学习NHibernate(1)——NHibernate介绍

那么大家从上面的图可以看出,NHibernate在应用程序和数据库之间起到了一个桥梁的作用,起到了数据持久化(Persistent)的作用,当然平时我们使用的是ADO.NET,这里我们使用了NHibernate。其实两者之间老魏认为没有什么大的区别,都是用来做持久化用的,但是我们可以这样认为,NHibernate是对ADO.NET的一种高级的封装。

NHibernate主要解决的是数据和对象之间的关系,我们称之为ORM。那么什么是ORM呢?对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存 在,主要实现程序对象到关系数据库数据的映射。

其实简单的说就是用对象来表示一条数据。比如现在数据库中有一条数据如下:

U_Id

U_Name

U_Sex

U_Email

U_Tel

U_Address

1

大话济公

Single_jie@163.com

xxxxx

九重天

那么如果用对象去表现这条数据怎么办呢?我们可以定义一个User类,同时定义User类的属性为数据库字段。

public class User

{

public int U_Id{get;set;}

public string U_Name{get;set;}

public string U_Sex{get;set;}

public string U_Email{get;set;}

public string U_Tel{get;set;}

public string U_Address{get;set;}

}

那么我们定义一个对象user同时给user对象的属性赋值

User user = new User{

            U_Id=1,

            U_Name=”大话济公”,

            U_Sex=”男”,

            U_Email=”single_jie@163.com”,

            U_Tel=”xxxxx”,

            U_Address=”九重天”

};

从这个对象中我们可以看出,这个对象的属性值和数据库存的数据是一样的,那么这样我们就通过对象来表现数据库中的数据了。这就是所谓的ORM。当然了,由于数据比较简单,没有体现数据和数据之间的关系,但是随着我们慢慢的学习,就知道使用NHibernate是如何表示这种关系的。

本章并不带着大家开始写NHibernate的第一个程序,主要来介绍一下NHibenate.

我们来看一下NHibenate的有点和缺点吧

优点:

(1).面向对象:NHiberante的使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想。

(2).透明持久化:带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的POCO,这个对象没有实现第三方 框架或者接口,唯一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序 的任何层*使用。(例如,用作跟表示层打交道的数据传输对象。)

(3).它没有侵入性,即所谓的轻量级框架。正因为它具有透明持久化的优点,它才没有侵入性,才是一个轻量级框架。恒定一个框架为重量级、还是轻量级,是根据其侵入性而定夺的。而NHibernate就是一个轻量级ORM框架。

(4).较好的移植性:支持多种数据库,便于数据库的迁移。

(5).缓存机制:提供一、二级缓存和查询缓存。

(6).开发效率:众所周知,使用NHibernate可以简化程序开发,从而达到快速开发的目的。作为软件公司,项目管理的关键就是控制开发 成本。正因为使用NHibernate后所写的代码量减少了,相对于原先使用“SqlHelper、DAL、BLL”开发程序的项目周期缩短了,成本就降低了。

  缺点:

(1).内存消耗:直接使用“SqlHelper、DAL、BLL”无疑是最省内存的。使用NHibernate后,内存开销比较大,这点是毋庸置疑的。

(2).批量数据库的处理:由于NHibernate是基于面向对象的ORM框架,处理数据库的方式是针对单个对象的。对数据库的增、删、改都 是正对一条记录而言。对于批量修改、删除数据,不适合用NHiberante。这也是所有OR框架弱点,其原因,我认为是在于与缓存机制的冲突。

(3).较多使用数据库特性时,也不适合使用NHiberante。如数据库中大量的存储过程、触发器、特点的SQL语句。

(4).表关系比较混乱时也不适合使用NHiberante。NHibernate只适合于表与表的关系比较明确的环境中。如本应该建立外键的,没有建立外键。这时使用NHiberante不仅没有减少工作量,反而增加了工作量。

(5).学习成本:相对于NHibernate来说,使用“SqlHelper、DAL、BLL”操作数据库,学习成本比较低,而且上手很快。 使用NHibernate需要有一定OOP(面向对象编程)和OOD(面向对象设计)的基础,这对于基础薄弱的程序员来说,从面向过程的编程到面向对象的 编程,需要一定的投入;一般情况下需要学习1个月左右的时间才能够深入NHiberante。

当然了,我们并不只看优点或者缺点,而是根据具体的情况来使用NHibernate。本章主要就介绍一下NHibenate,下一章我们开始来玩玩NHibernate吧。