本人配置NHibernate心得
本人配置NHibernate心得,希望你对大家有所帮助的
一.开发环境:VS2010打了sp1包的。没打不影响使用。
Nhibernate使用的是3.1版本的。大家可以去这里去下载最新版本的。附网址:http://nhforge.org/打开就能下载最新版本。
数据库为MSSql2005
二.前提准备:理解几个概念
(1)什么是Nhibernate?
答:NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去-------答案来自百度。
(2)什么是ORM?
答:就英文意思而言是对象关系映射的一种模型化数据。从图可以看得很明白。
(3)两者有什么关系?
答: NHibernate 是一个面向.NET 环境的对象/关系数据库映射工具
三 .开始第一个程序的测试和配置吧
- 做一个简单的NHibernate配置需要做如下工作。编写可持久化类,编写映射持久化类的映射文件。应用程序中对Nhibernate的配置文件一般在App.config总和Web.config中配置,而也可以使用单独的xml文件进行配置。然后就可以使用Nhibernate的API进行程序的编程楽。
- 好了废话少说。首先我们建立表,我使用的是一个简单的People表含有Id,Name,Age三个字段。其中Id设置为自增长模式。
3.好了,表建立OK了我们就需要建立我们的程序的。这里本人使用的是web应用程序,名字取为NhibernateApp
4.然后添加对Nhibernate中的DLL程序集的引用。本人喜欢单独放在一个文件夹中。
打来下载下来的Nhibernate(编译过)文件夹找到Required_Bins文件夹打开。
复制Iesi.Collection.dll和NHibernate.dll到程序的Lib(为自己所建立的)下,然后打开Required_For_LazyLoading文件夹将NHibernate.ByteCode.Castle.dll文件也复制到Lib下的,对于最新版本好像没有这个文件夹的,大家可以下载以前的版本得到这个dll文件,关于此文件的应用我也一直不是特别的清楚,这是一种第三方的插件,用于坚决缓存的机制的,本人是这样认为的,可能不对。如果有人知道请大家告诉我。谢谢。
5.然后添加对Nhibernate配置信息。在web.config中添加
下面这个是为Nhibernate的详细配置。
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">
Data Source=.;Initial Catalog=sanceng;Integrated Security=True
</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name ="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<mapping assembly ="NhibernateApp"/>
</session-factory>
</hibernate-configuration>
但是对于Asp.NeT程序而已,它不认识这个节点
(<hibernate-configuration)所以在web.config中还需添加一个configSections
如下:
好了,如上就是web.config的文件配置。数据库为sanceng。访问该数据库中Person表。
5.建立好NHibernate的配置文件和DLL的引用了,接下就可以使用的了。
6.在引用上面添加对添加的DLL引用,如图:
7.接下就可以使用这些API了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NHibernate;
using NHibernate.Cfg;
namespace NhibernateApp
{
public partial class index : System.Web.UI.Page
{
ISessionFactory factoy=null ;
ISession session=null ;
protected void Page_Load(object sender, EventArgs e)
{
factoy = new Configuration().Configure().BuildSessionFactory();
session = factoy.OpenSession();
}
}
然后执行程序网页通过了。说明你的NHibernate配置成功了一半,许多朋友会奇怪NHibernate不是做持久化类的映射的。为什么只是打开一个网页什么事情都没有的啊?怎么保存对象而直接进入数据库的啊?怎么查询数据啊?不要着急后面会为大家慢慢说的。首先我来为大家说说ISessionFactory,和ISession这两个接口的用途?
ISessionFactory :可以创建并打开新的Session。一个S
ession 代表一个单线程的单元操作。ISessionFactory 是线程安全的,很多线程可以同
时访问它。
ISession:打开一个即使的会话,用于来操作对象对应数据库。
8.接下来我们尽可以做持久化类了。对于持久化类而言,就是将数据库表的各个字段转成为对象的各个属性来描述一个对象。首先我们建立一个Person对象。如图:
图中我们建立了一个Person类来持久化类。
改类的文件内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace NhibernateApp
{
public class Person
{
private int id;
public virtual int Id
{
get { return id; }
set { id = value; }
}
private string name;
public virtual string Name
{
get { return name; }
set { name = value; }
}
private int age;
public virtual int Age
{
get { return age; }
set { age = value; }
}
}
}
这里要有一个值得注意的地方就是属性声明的方式必须是virtual来形容。
不然后导致出现异常。
9.接下来我们就可以设置持久化类的映射文件Person.hbm.xml文件
这个文件的命名有点要求,必须以.hbm.xml结尾,名称也要和所映射的类的名称
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NhibernateApp.Person, NhibernateApp" table="People">
<id name="Id" column="Id" type="Int32">
<generator class="native"/>
</id>
<property name="Name" column="Name" type="String"/>
<property name="Age" column="Age" type="Int32"/>
</class>
</hibernate-mapping>
这个什么意思等下下面会有一个更详细的图解。
对于持久化类的映射文件建立好了,接着就可以用了的。这里要注意一点就是Person.hbm.xml点击属性,在生成操作那里选着嵌入式资源,不然会出现异常。如图:
然后就可以成功了的。我们的第一个NHibernate程序终完成了的、。好兴奋,下面我们一起测试一下的吧:
新增一个aspx页面,上面添加两个文本框,一个取名为txtName用于接收新增Person的姓名,一个味txtAge,为Person对象的年龄
最后添加一个按钮的我们的任务就是点击新增按钮,程序能够将你所填的姓名和年龄加入数据库,仅仅几个代码做了这么神奇的事情,真是很解放生产力。还有关于大家说的那个写持久化类和写类的映射文件不是花了很多时间的,答案不是这样的,我们可以非常强大的代码生成器工作(CodeSmith)。
好了!!
我们看看神奇的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NHibernate;//添加对NHibernate的引用
using NHibernate.Cfg;//这里是Configuration类的命名空间
namespace NhibernateApp
{
public partial class index : System.Web.UI.Page
{
ISessionFactory factoy=null ;
ISession session=null ;
protected void Page_Load(object sender, EventArgs e)
{
factoy = new Configuration().Configure().BuildSessionFactory();//建立一个factory工厂。
}
protected void Button1_Click(object sender, EventArgs e)
{
session = factoy.OpenSession();//创建一个会话使用的session
Person p=new Person ();
p.Age = Convert.ToInt32 ( txtAge.Text);
p.Name = txtName.Text;
session.Save(p);//保存对象。在数据库也保存。
Response .Write ("Ok");
}
}
}
好了。我们运行看看吧。。。。。。。。。。。。。。。。。。。。。。。。。。。很激动。。。。
网页内容点击执行!
如图:
出现OK了。成功了。我们打开数据库有没有添加进去的。
如图:
大家看到第六条数据了吗?就是我们刚才添加那条。好了。Nhibernate程序就到这里了,下卖弄给两张图给大家是我对配置文件和映射文件的理解。只是片面的,希望大家可以多多问问Google大神!!!关于Nhibernate最深层次的东西,我也会在慢慢学习,然后拿出来给大家分享的,好了,不多说了,直接上图:
《------------------------------------------------------------》配置文件中详解:
(1-web.config)
(2-Person.hbm.xml)
四:使用的技巧:
- 配置文件中那些自动提示功能:
-------在解决方案中添加一个解决方案文件夹,名字为Schemas,然后把下载到Nhibernate文件中两个.
添加到刚才新建的文件夹中。
------------------如果大家觉得麻烦可以直接打开你所安装的VS所在的盘下的
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml里面有一个在Schemas的文件夹把刚才说的两个文件复制到里面去也可以。注意上面的路径是我的路径,只是给大家一个借鉴,你们要找还是去你安装VS盘中找的。
2.关于配置文件中那些方言,驱动在哪里可以看到啊?
打开前面的解决方案,在引用中找到Nhibernate打来对象流浪器
然后可以在NHibernate下的命名空间中找到自己所需的。比如,配置文件的方言:
打开就可以看到各种数据库的方言的,右键点复制到配置文件中即可。
五:完结。
第一次写文章,语言组织不是特别强的,希望大家不要见外。以后的学习中我会把自己在Nhibernate学习到的最新的东西拿来分享,本人也是上个星期才接触这个,还有许多不懂的地方,网上的资料太乱了,自己找了很多遍的,然后慢慢摸索,得到这个心得,希望对大家有所帮助。谢谢。。。