本文内容主要来自
http://www.hibernate.org/362.html。原文是英文。
什么是
NHibernate
?
NHibernate是一个用于.NET的对象持续化的库,它由Java中的Hibernate移植而来,可以将对象方便地从关系数据库中读取和存入。
开发过程:
创建存储.NET对象的数据库表
创建需要被存储的NET类
创建一个用来关联这个类和数据库表的映射文件
创建一个配置文件用来告诉NHibernate如何联接数据库
调用NHibernate API
第一步:创建表
以SQLServer2000 数据库为例,创建NHibernate数据库,并建立一个users表
use NHibernate
go
CREATE TABLE users (
LogonID nvarchar(20) NOT NULL default '0',
Name nvarchar(40) default NULL,
Password nvarchar(20) default NULL,
EmailAddress nvarchar(40) default NULL,
LastLogon datetime default NULL,
PRIMARY KEY (LogonID))
go
第二步:创建
.NET
类
using
System;
namespace
NHibernate.Examples.QuickStart
{
public class User
{
private string id;
private string userName;
private string password;
private string emailAddress;
private DateTime lastLogon;
public User()
{
}
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; }
}
}
}
第三步:编写映射文件
<?
xml
version
=
"1.0"encoding="utf-8" ?>
<
hibernate-mapping
xmlns
=
"urn:nhibernate-mapping-2.2">
<
class
name
=
"NHibernate.Examples.QuickStart.User, NHibernate.Examples.QuickStart"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
>
这一步比较重要,有以下几个注意点:
(1) 映射文件必须和对应的类文件放在同一个地方。类文件所处的程序集必须和映射文件一致。否则会出现找不到类的异常。
(2) 其中 <class/> 中的name属性是 “完整类名,程序集名”, table是数据库中的表名,注意,如果数据库表名恰好是SQL关键字,则要加上[](对于SQLServer而言);lazy=”false”设置可以使.net类里边的方法和属性不必是virtual的,至于为什么,我也不懂。以后再说。
(3) 此配置文件必须设置成嵌入式资源。方法为,右击此文件,Properties->BuildAction->Embedded Resource
这个文件中,id是主键。 generator告诉NHinberate如何生成这个主键,这里assinged表示由用户提供,也就是.Net类里Id必须是有值的。propery很明显就是其他的列了。
第四步
编写数据库配置文件
<?
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.dialect"
value
=
"NHibernate.Dialect.MsSql2000Dialect"
/>
<
add
key
=
"hibernate.connection.driver_class"
value
=
"NHibernate.Driver.SqlClientDriver"
/>
<
add
key
=
"hibernate.connection.connection_string"
value
=
"Server=localhost;initial catalog=hinbernate;Integrated Security=SSPI;user=sa;password=123"
/>
</
nhibernate
>
</
configuration
>
这一步我没有遇到什么问题,照着copy下就可以了,按照自己的需要改变下其中的内容,如果有需要的话。
第
5
步
使用
Hibernate
下面可以开始使用Hinbernate编程了。
Configuration cfg = new Configuration();
cfg.AddAssembly("NHibernate.Examples.QuickStart");
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
User newUser = new User();
newUser.Id = "joe_cool";
newUser.UserName = "Joseph Cool";
newUser.Password = "abc123";
newUser.EmailAddress = "joe@cool.com";
newUser.LastLogon = DateTime.Now;
session.Save(newUser);
transaction.Commit();
session.Close();
session = factory.OpenSession();
User joeCool = (User)session.Load(typeof(User), "joe_cool");
// set Joe Cool's Last Login property
joeCool.LastLogon = DateTime.Now;
// flush the changes from the Session to the Database
session.Flush();
上面的程序包含了基本的插入,读取,修改的操作。
关于Hinbernate的具体内容以后再议。