Nhibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。
上面可能说得很抽象,我解释一下,为什么用Nhibernate省时省力.
如果在没有用Nhibernate的时候,如果往数据库中插入一条数据,我们可能会要写一个SQL语句,写的时候要了解数据表结构,然后这样写:
insert into 表名 ([字段1],[字段2]) values ('"&页面参数1&"','"&页面参数2&"')
写的时候还要考虑到语句的正确性,这是比较简单的SQL语句,如果再复杂一点的话,对于编程人员来说很是麻烦.
有了Nhibernate,我们就可以不管这些了,因为Nhibernate将数据库的增,删,查,改都封装好了,我们只要提供对象属性给它,其他就交给Nhibernate去处理了,这就大大减轻的程序员的负担.
我们来进入实战,分为以下几步:
1.到网上下载Nhibernate类库,因为调用的时候要引用nhibernate的dll文件.可以到它的官方主页上去下载
http://www.nhibernate.org/.主要核心dll有如下几个:
NHibernate.dll,log4net.dll,Iesi.Collections.dll,Castle.DynamicProxy.dll
2.建立数据库logging,建立一个简单的用户表,字段如下:
Create Table Users(
LogonID varchar(20) Primary key,
Name varchar(40),
Password varchar(20),
EmailAddress varchar(40) ,
LastLogon datetime
)
3.打开vs2005,建立一个网站项目NhibernateDemo,这里采用三层结构,模型层(Model),数据访问层(DAL),业务逻辑层(BLL).将以上的dll添加到引用中.否则编译报错.
建立用户模型:
using System;
namespace NHibernateWebDemo.Model
{
public class User
{
public User()
{
}
private string id;
private string userName;
private string password;
private string emailAddress;
private DateTime lastLogon;
public string Id
{
get { return id; }
set { id = value; }
}
public string UserName
{
get { return userName; }
set { userName = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
public string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}
public DateTime LastLogon
{
get { return lastLogon; }
set { lastLogon = value; }
}
}
}
4.构建一个可以让NHibernate知道如何完成ORM映射的XML文件
该xml需要手写,也可用专业的工具去生成,这里我推荐CodeSmith Professional 4.1
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model" table="users" lazy="false">
<id name="Id" column="LogonId" type="String" length="20">
<generator class="assigned" />
</id>
<property name="UserName" column= "Name" type="String" length="40"/>
<property name="Password" type="String" length="20"/>
<property name="EmailAddress" type="String" length="40"/>
<property name="LastLogon" type="DateTime"/>
</class>
</hibernate-mapping>
5.建立数据访问层,这一层比较复杂.首先要给出Nhibernate数据抽象工厂,其作用是根据需要实例化Nhibernate对象,便于调用Nhibernate里的方法,给出部分代码:
public static ISession OpenSession(string AssemblyName)'打开session,其作用就像先打开数据库连接一样
{
if(sessions == null)
{
lock(padlock)
{
if(sessions == null)
{
BuildSessionFactory(AssemblyName);
}
}
}
return sessions.OpenSession();
}
private static void BuildSessionFactory(string AssemblyName)'建立session工厂,初始化配置
{
cfg = new Configuration();
cfg.AddAssembly(AssemblyName);
sessions = cfg.BuildSessionFactory();
}
6.下面就开始编写一些增,删,查,改的方法了
如果增加数据,可以编写如下代码:
public void AddEntity(Object entity)
{
ISession session = SessionFactory.OpenSession(_AssemblyName);'调用抽象工厂里的方法
ITransaction transaction = session.BeginTransaction();'事务回滚
try
{
session.Save(entity);'这里是save方法,很简单,保存数据啦,不需要编写sql语句,很强
transaction.Commit();
}
catch(Exception ex)
{
transaction.Rollback();
throw ex;
}
finally
{
session.Close();
}
}
7.在业务逻辑层去调用这个方法
using System;
using System.Collections;
using NHibernateWebDemo.DAL;
using NHibernateWebDemo.Model;
namespace NHibernateWebDemo.BLL
{
public class UserBLL
{
public void AddUser(User user)
{
UserDAL dal = new UserDAL();
dal.AddUser(user);
}
}
}
这个实例是个很简单的例子,通过它我们可以看到nhibernate减轻了程序员的大量重复劳动.不用考虑sql语句就可以执行数据的各种操作了,但是nhibernate对多表关联处理还不是很好,需借用第三方插件,还有待进一步研究.
DoNet数据持久层框架的集大成者--Nhibernate
最新推荐文章于 2018-06-01 11:49:05 发布