一:
在目前的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦。NHibernate是一个面向.net环境的对象/关系数据库映射工具(object/relation mapping(ORM))这个是一种技术,用来把对象模型表示的对象映射到基于sql的关系模型数据库结构中去。对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以.NET为中心的,意味着映射是按照持久化类的定义来创建的,而非表的定义。ORM是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是著名的Hibernate的.Net版本.NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西.它是从基于Java的Hibernate项目移植而来。在这里的O/R Mapping,除了能将一张表映射为一个对象,还可以将表间的关系变为对象的属性。简单的说就是能实现把一个对象存储为数据表中的一条记录和由一条记录创建一个相应的对象,数据表中的数据就是对象的属性。例如:学生和课程间的多对多的关系就可以转化为学生类中的一个课程集合的属性。因此,NHibernate不仅仅管理.net类到数据库表的映射,还提供数据查询和获取数据的方法。因此采用NHibernate,可以大幅度减少开发时人工使用sql处理数据的时间。
也许还有人问,那么我们为什么还要使用O/R Mapping?他与原来我们使用的dataset/datatable又有什么区别啦?
其实,我们仔细研究一下关于他们的含义就会明白,他们俩最主要的区别就是设计上的不同,当使用O/R Mapping时,更多的是从对象的角度来设计程序,而把数据(对象的属性)存储的细节放在后面, 可以完全采用面向对象(OO)的方式来设计,而在使用DataSet/DataTable时,它只是存放数据的对象,看起来更像一个数据表,不能直观的表达业务概念。
二:
这里我们介绍下NHibernate中的主要接口
1:ISession:ISession是面向用户的主要接口,主要用于对象持久化,数据加载等操作,支持数据库事务,它隐藏了NHibernate内部复杂的实现细节,ISession由ISessionFactory创建。
2:ISessionFactory:ISessionFactory是NHibernate内部的核心类,它维护到持久机制(数据库)的连接并对它们进行管理,同时还会保存所有持久对象的映射信息。
ISessionFactory由Configuration创建,因为创建ISessionFactory的开销非常大(需要加载映射信息),所以这个对象一般使用Singleton(单例)模式。
3:ITransaction:ITransaction是NHibernate的事务处理接口,它只是简单的封装了底层的数据库事务。事务必须由ISession来启动。
4:ICriteria:ICriteria是Expression(表达式)数据加载接口,Expression是一个关系表达式组合,通过它能产生SQL语句的Where部分, 用户需要通过ISession来间接调用它。
5:IQuery:IQuery是HQL数据加载接口,HQL(Hibernate Query Language)是NHibernate专用的面向对象的数据查询语言,它与数据库的SQL有些类似,但功能更强大!同ICriteria一样,也需要通过ISession来间接调用它。