DoNet数据持久层框架的集大成者--Nhibernate收藏

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对多表关联处理还不是很好,需借用第三方插件,还有待进一步研究.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ice241018/archive/2009/04/22/4101791.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值