NHibernate的肤浅认识

      NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库,Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具(因此阅读Hibernate说明文档可以增强对Nhibernate 的认识)。
NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去.

Nhibernate未来将会提供一些工具帮助你自动产生schema文件(现在还是基于代码)或是通过映射文件产生类(在筹措阶段)或是更新schema(来自于一个新开发者的建议)。然而,这里我们的例子是假定一切来自于完全手写,包括设置表和.Net类的编写。我们将进行以下步骤。

1.新建一个将要持久化.Net对象的表
2.构建一个需要被持久化的.Net类
3.构建一个可以让NHibernate知道如何持久化对象属性的映射文件
4.构建一个让NHibernate知道如何连接数据库的配置文件
5.使用NHibernate的API

 

    使用的是MS Sql Server 2000, 但也可以使用任何数据库,只要你有关于它们的基于.Net数据提供驱动程序。

一. 建表

use NHibernate
go
 
CREATE TABLE users (
  LogonID nvarchar(20) NOT NULL default ’0’,
  Name nvarchar(40) default NULL,
  Password nvarchar(20) default NULL, 
  PRIMARY KEY  (LogonID)
)
go


    NHibernate通过对象属性的反射来工作,因此需要添加希望持久化的对象属性。

 

二. 编写对应的实体类

     属性和构建函数是public类型,但这个对NHibernate不是必要的.它可以使用public, protected, internal或者甚至是用private来持久化数据。

 

三. 写映射文件

          需要一种方式去让NHibernate知道如何从一个映射到另一个。这个任务依赖于映射文件来完成。最易于管理的办法是为每一个类写一个映射文件,如果你命名它是YourObject.hbm.xml 并且把它放在和类的同一个目录里,NHiberante将会使得事情简单起来。

        下面是一个User.hbm.xml的例子:

       将发现name属性的值正是我们实体 类的属性,column属性值将是我们数据库里的字段。type属性是可选的(如果你不标明,NHibernate将利用反射进行最佳的推测)。 
      可以猜测到这个<id>标签将是映射数据库表的主键,id标签的组成刚才看的property标签是相似的。映射属性到目标数据库的字段。
      内嵌的generator 标签告诉NHibernate 如何生成主键(它将恰当的为你生成主键,不管你指定何种类型,但你必须告诉它)。可以设定为assigned,意味着对象将自己生成主键(毕竟User对象常常需要一个UserID)。


提示:如果使用Visual Studio.Net 去编译的话,将user.hbm.xml的Build Action属性设置为Embedded Resource。映射文件将成为装配件的一部分。 如果你仅仅是改变映射文件,不能使用build 而应该Rebuild项目。Visual Studio.Net 不会重新编译有改变的映射文件。

 

四. 为数据库产生一个配置文件

      还没有告诉NHibernate 去哪里连接数据库。最直接的办法是在应用程序的配置文件里设置一个NHibernate配置节。这和在Hibernate里使用属性文件是等价的。如下配置:


      上面用了SqlClient 驱动,在本地连接名称为NHibernate 的数据库,提供用户名和密码。

 

五. 开始应用NHibernate

     所有工作已经完成。你将有以下内容
User.cs ----你需要持久化的C#类
User.hbm.xml ----你的NHibernate映射文件
App.config ---对ADO.NET连接的配置信息
你的数据库里有一张User表

 
现简化的版本如下
创建一个Configuration对象 
让Configuration知道你将存储何种类型的对象 
为你选择的数据库创建一个Session对象 
Load,Save和Query你的对象 
通过Session的Flush()方法将对象提交给数据库。

为了更清晰,来看一些代码。
首先,创建一个Configuration对象
Configuration对象能够解析所有.Net对象和后台数据库中的映射关系。

       Configuration cfg = new Configuration();
        cfg.AddAssembly("NHibernate.Examples");          
Configuration对象会搜索装配件里的任何以hbm.xml 结尾的文件。还有其他方法加载映射文件,但这种方式是最简单的。

下一步,创建一个Session对象
ISession对象提供一个到后台数据库的连接,ITransaction对象提供一个可以被NHibernate管理的事务。             
        ISessionFactory factory = cfg.BuildSessionFactory();
        ISession session = factory.OpenSession();
        ITransaction transaction = session.BeginTransaction();
接着来Load, Save和Query对象


现在可以用使用传统的.Net方法来操纵对象。

 

       正如所看到的,关于NHiberante重要的事情是如此简单。继续并且查询数据库,验证一下User表里的新记录。

现在重要的事情就是去操心业务对象并在进行处理的时候告诉NHibernate就可以了。
       当有一个UserID的时候如何获取对象(如:登陆的时候)。仅仅一句话就可以打开Session,传入key就可以了 

 
       所要做的就是通过NHibernate来进行需要的改变,并调用Session的Flush()方法提交。验证一下数据库,查查用户ID为”joe_cool”的记录中”LastLogin”的更改。

还有更好的,你可以以System.Collections.IList的方式来获取从表中的对象。如下                

已经完成创建对象,持久化并通过条件查询或键值查询来返回它。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值