基本的软件环境如下:
1.NHibernate www.nhibernate.org 当前版本是1.0.2
2.Code Smith http://www.codesmithtools.com/
3.NHibernate模板 点击这里下载
当然,少不了VS2005跟SQLServer了,我这里用的是SQLServer2005,教程用在SQLServer2000上应该没有问题,默认情况下,我将建立并使用一个叫NHibernate的数据库。

首先,我们先建立一个最简单的Person表,如下完整脚本(你可以进行修改以适合自己的数据库):

USE [NHibernate]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Person](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
 CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (IGNORE_DUP_KEY =OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

仅有两个字段,一个自动增长的id,一个name,如下:

 
然后将下载的nhibernate-template解压,打开Code Smith,将模板加入”Template Explorer”,如下:

 
然后在其中的NHibernate.cst上点右键,选择“Execute”,弹出设置窗口,在左边的属性窗口进行如下设置:

 
注意:SourceDatabase属性在第一次选择时需要配置一个连接字符串,配置好后Code Smith将记录下来。 Assembly属性代表的是生成文件的默认Assembly名,而NameSpace,顾名思义,就是使用的命名空间了,这里我们全部使用”Test.Model”,请记住这个名字,点击左下角的Generate,将会在指定的输出目录下产生两个文件:Person.cs,Person.hbm.xml。

好了,NHibernate需要的类文件和映射文件生成完了,我们可以开始干活了!(生成NHibernate文件均是如此步骤,以后不再赘述)

新建立一个类库工程,为了简洁起见,我们命名为Model,需要注意的是,为了跟刚才生成的文件对应,我们需要在Model工程的属性页中将起Assembly名字设为上面的“Test.Model”,如下:

 
然后将刚才生成的两个文件Person.cs和Person.hbm.xml加入到Model工程中来,选中Person.hbm.xml文件,在属性窗口中将其“Build Action”设置为“Embedded Resource”(这是非常重要的一步,否则NHibernate将无法找到映射文件),如下:
 

build,ok,通过。

然后建立一个控制台工程,命名为Console1,添加NHibernate和上面Model项目的引用,另外添加一个应用程序配置文件,如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nhibernate"type="System.Configuration.NameValueSectionHandler, System,
                    Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  </configSections>

  <nhibernate>
    <add key="hibernate.connection.provider"value="NHibernate.Connection.DriverConnectionProvider"/>
    <add key="hibernate.connection.driver_class"value="NHibernate.Driver.SqlClientDriver"/>
    <add key="hibernate.connection.connection_string"value="Server=localhost;Initial Catalog=NHibernate;Integrated Security=SSPI"/>
    <add key="hibernate.connection.isolation"value="ReadCommitted"/>
    <add key="hibernate.dialect"value="NHibernate.Dialect.MsSql2000Dialect"/>
  </nhibernate>

</configuration>

然后编写如下代码:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingNHibernate;
usingNHibernate.Cfg;
usingTest.Model;

namespaceConsole1
{
    class Program
    {
        static void Main(string[] args)
        {
            Configuration config = new Configuration().AddAssembly("Test.Model");
            ISessionFactory factory = config.BuildSessionFactory();
            ISession session = factory.OpenSession();

            Person person = new Person();
            person.Name = "Jackie Chan";

            ITransaction trans = session.BeginTransaction();
            try
            {
                session.Save(person);
                trans.Commit();
                Console.WriteLine("Insert Success!");
            }

            catch (Exception ex)
            {
                trans.Rollback();
                Console.WriteLine(ex.Message);
            }

        }

    }

}

运行,ok,执行成功!!
我们到数据库检查一下,如下:

 
我们想要添加的记录已经成功加入到数据库中!!
是不是感觉有些神奇啊?好,我们开始详细解释。
先来看生成的两个文件,第一个是Person.cs,如下:

usingSystem;
usingSystem.Collections;

namespaceTest.Model
{
    Person
}

你可以发现,这完全是一个普通的poco类(Plain Old CLR Object),仅仅是对数据库person表的一个完全映射,不依赖于任何框架,可以用来作为持久化类,你可以在任何地方使用而不用担心依赖于某些神秘的运行时东西。

另外,NHibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是NHibernate映射文件发挥作用的地方。映射文件告诉NHibernate它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column),这就是我们今天要讲的重点了,Person.hbm.xml,如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
 <class name="Test.Model.Person, Test.Model"table="Person">
  <id name="Id"type="Int32"unsaved-value="0">
   <column name="id"sql-type="int"not-null="true"unique="true"index="PK_Person"/>
   <generator class="native"/>
  </id>
  <property name="Name"type="String">
   <column name="name"length="50"sql-type="varchar"not-null="true"/>
  </property>
 </class>
</hibernate-mapping>

不用说,最顶层的hibernate-mapping节点是NHibernate用来进行映射的根了,其中,包含一个class节点,里面的name属性对应我们的Person类,注意,需要完整的限定名;而table属性,则显而易见是对应数据库中的Person表了。
我们再往里面看,分别有两个节点,一个是id,对应数据库中的id,一个是属性name,对应表中的column name和Person类中的name属性,整个映射文件简捷明了,一看即知。实际上这是由代码产生工具产生的映射文件,里面很多东西我们其实可以省略,如下写法:
<property name=”Name” column=”name” />
NHibernate将自动去匹配数据库中的列而不需要我们来设置。

下面,我们来看一下应用程序配置文件中都记录了那些东西,如下:
hibernate.connection.provider_class  
定制IConnectionProvider的类型. 
例如:full.classname.of.ConnectionProvider (如果提供者创建在NHibernate中), 或者 full.classname.of.ConnectionProvider, assembly (如果使用一个自定义的IConnectionProvider接口的实现,它不属于NHibernate)。
 
hibernate.connection.driver_class  
定制IDriver的类型. 
full.classname.of.Driver (如果驱动类创建在NHibernate中), 或者 full.classname.of.Driver, assembly (如果使用一个自定义IDriver接口的实现,它不属于NHibernate)。

hibernate.connection.connection_string  
用来获得连接的连接字符串.

hibernate.connection.isolation  
设置事务隔离级别. 请检查 System.Data.IsolationLevel 来得到取值的具体意义并且查看数据库文档以确保级别是被支持的。 
例如: Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified

hibernate.dialect 
NHibernate方言(Dialect)的类名 - 可以让NHibernate使用某些特定的数据库平台的特性 
例如: full.classname.of.Dialect(如果方言创建在NHibernate中), 或者full.classname.of.Dialect, assembly (如果使用一个自定义的方言的实现,它不属于NHibernate)。

接着,我们开始解释代码的执行,如下:

Configuration config =newConfiguration().AddAssembly("Test.Model");

//通过配置对象来产生一个SessionFactory对象,这是一个Session工厂,
//那么Session是用来干什么的呢?一个Session就是由NHibernate封装
//的工作单元,我们可以近似地认为它起到ADO.Net中Connection的作用。
ISessionFactory factory =config.BuildSessionFactory();
ISession session =factory.OpenSession();

Person person =newPerson();
person.Name ="Jackie Chan";

//这里,开启一个由NHibernate封装的事务,当然,在这里最终代表
//的还是一个真实的数据库事务,但是我们已经不需要再区分到底是
//一个SqlTransaction还是一个ODBCTransaction了
ITransaction trans =session.BeginTransaction();
try
{
    //保存,提交,就这么简单!!
         session.Save(person);
        trans.Commit();
        Console.WriteLine("Insert Success!");
}

catch(Exception ex)
{
        trans.Rollback();
        Console.WriteLine(ex.Message);
}

现在有了一个基本的概念了吧??

转载于:https://www.cnblogs.com/cw_volcano/archive/2011/12/30/2307550.html

NHibernate学习相关推荐

  1. NHibernate学习笔记(二):one-to-one关系映射

    上一篇:NHibernate学习笔记(一):初识NHibernate 本文的内容:1.介绍NH如何处理对象间one-to-ont的映射关系: 经验教训: 1.操作一对一关联关系中的一个对象时,得在程序 ...

  2. nhibernate学习之集合组合依赖

    1.学习目标    还是学习compenent的用法,上节实现了简单字段的组合,这节中将讨论两个问题:1.依赖对象有一个指向容器对象的引用.2.集合依赖 2.开发环境和必要准备    开发环境为:wi ...

  3. Nhibernate学习教程(1)-- 开篇有益

    NHibernate之旅(1):开篇有益 本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06 ...

  4. NHibernate 学习总结 开篇

    终于又能走路上班了,不容易啊!由于新公司打算用Nhibernate来做数据逻辑层的操作,加上我之前也有用过这个东西差不多一年的时间,终于找这个机会把Nhibernate从头到尾系统地学习一下,并做下笔 ...

  5. NHibernate学习(转)

    本文约定: 1. Nhibernate简写为NHB; 2. 本文例子的开发平台为win2000xp+sp2, sql server2000, Nhibernate0.9.1.0; 3. 使用SQL S ...

  6. Nhibernate学习起步之many-to-one篇(转)

    1.     学习目的: 通过进一步学习nhibernate基础知识,在实现单表CRUD的基础上,实现两表之间one-to-many的关系. 2.     开发环境+必要准备 开发环境: window ...

  7. Nhibernate学习之many-to-many篇

    学习目的: 通过进一步学习Nhibernate基础知识,掌握用Nhiberate实现多对多的业务逻辑 开发环境+必要准备 开发环境: windows 2003,Visual studio .Net 2 ...

  8. NHibernate学习总结:(一)NHibernate的使用和配置

    从今天开始学习NHibernate,同时记录一些遇到的问题和学习的经验,希望对大家有一些帮助. NHibernate的具体作用之类的,我就不介绍了,直接开始它的使用. 开发工具:VS2008 SP1 ...

  9. 框架:NHibernate学习目录

    NHibernate 基本配置 (第一篇) 摘要: 使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习.今天就来详解一下NHibernate的配置.一. ...

  10. Nhibernate学习的第一天

    书本:https://www.tutorialspoint.com/nhibernate/index.htm 第一天学习内容 概念 Nhibernate是一个ORM框架. ORM框架:将声明的类映射到 ...

最新文章

  1. 【Harvest源码分析】NuttallWindow
  2. texmaker不能点击跳转到行
  3. tcpdump抓包对性能的影响
  4. Python学习笔记 ---第三章
  5. 西湖大学生命学院章永登实验室 (超分辨成像)科研团队招聘启事
  6. 饶毅教授纵论“科学家的九个层次”;看到最后一句,终于绷不住了
  7. 英特尔立 Flag:年末一定彻底解决“芯片门”Bug!
  8. _itemmod_description
  9. 基于FNC(全卷积神经网络)及PASCAL-VOC数据集做图像语义分割(附代码)
  10. Python代码规范
  11. Java 软件实践 VZone PPT Show 一次及其Perfect的演示
  12. 计算机应用在服务业的发展,饮食服务业计算机应用的现状与未来
  13. 程序员如何提升开发团队的协作效率和质量?
  14. @submit.native.prevent
  15. CF1132D Stressful Training (binary search)(greedy)
  16. uniCloud云开发平台简介及云函数数据库基础操作练习(新人首作,欢迎支持
  17. c语言学生成绩系统综合实验,C语言学生管理系统_综合实验报告.docx
  18. 工业级加固固态硬盘产品性能-领存2.5 寸 R-SATA SSD介绍
  19. JS操作excel文件
  20. CAD文件如何转成PDF格式?告诉你如何转换

热门文章

  1. 医疗器械图纸管理软件,图文档管理解决方案
  2. 新概念英语第二册Lesson5:No wrong numbers
  3. 丁香园iOS电话面试问题总结
  4. ios android mid音频文件,ios – 使用MusicPlayer和Music Sequence播放midi文件
  5. 基于springboot+vue的疾病匿名检测查询系统
  6. matlab雷达处理工具箱,GitHub - feng-zx/radar_tools: 雷达信号处理工具箱
  7. Python如何对数组求导(差分)?
  8. AI 预测蛋白质结构「GitHub 热点速览 v.21.29」
  9. unity沙子堆积_unity游戏逼真沙子和白雪粒子特效渲染创建插件Basic Sand amp; Snow 1.0 - 素材巷...
  10. 微软安全软件OneCare Live