NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.由JAVA平台的Hibernate迁移到.NET平台。
NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你不用自己编写Sql语句去操作这些对象,NHibernate会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西.
创建一个WEB 应用程序Test!
1:配置
在<configSections>元素里定义了hibernate-configuration配置节。在<hibernate-configuration>节里面,我们告诉NHibernate使用MS SQL2005的数据库,并指明了数据库链接字符串。
<?
xml version="1.0" encoding="utf-8"
?>
<
configuration
>
<!--
Add this element
-->
<
configSections
>
<
section
name
="hibernate-configuration"
type
="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
/>
</
configSections
>
<!--
Add this element
-->
<
hibernate-configuration
xmlns
="urn:nhibernate-configuration-2.2"
>
<
session-factory
>
<
property
name
="dialect"
>
NHibernate.Dialect.MsSql2005Dialect
</
property
>
<
property
name
="connection.provider"
>
NHibernate.Connection.DriverConnectionProvider
</
property
>
<
property
name
="connection.connection_string"
>
Server=TLSZ207\SQLEXPRESS;initial catalog=Test;Integrated Security=true
</
property
>
</
session-factory
>
</
hibernate-configuration
>
<!--
Leave the system.web section unchanged
-->
<
system.web
>
</
system.web
>
</
configuration
>
hibernate.dialect
NHibernate方言(Dialect)的类名 - 可以让NHibernate使用某些特定的数据库平台的特性.
hibernate.connection.provider_class
定制IConnectionProvider的类型.
hibernate.connection.connection_string
用来获得连接的连接字符串.
2:创建数据表
1
use
Test
2
GO
3
CREATE
TABLE
User
(
4
LogonID
varchar
(
20
)
NOT
NULL
default
'
0
'
,
5
UserName
varchar
(
40
)
default
NULL
,
6
Password
varchar
(
20
)
default
NULL
,
7
)
8
GO
3:创建与数据库表映射的实体类
namespace
Test
{
public class User
{
private string logonID;
private string userName;
private string password;
public User()
{
}
public string LogonID
{
get { return logonID; }
set { logonID = value; }
}
public string UserName
{
get { return userName; }
set { userName = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
}
这完全是一个普通的poco类(Plain Old CLR Object),仅仅是对数据库User表的一个完全映射,不依赖于任何框架,可以用来作为持久化类,你可以在任何地方使用而不用担心依赖于某些神秘的运行时东西。
4:创建映射文件
NHibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是NHibernate映射文件发挥作用的地方。映射文件告诉NHibernate它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)
<?
xml version="1.0" encoding="utf-8"
?>
<
hibernate-mapping
xmlns
="urn:nhibernate-mapping-2.2"
>
<
class
name
="User"
table
="User"
>
<
id
name
="LogonID"
column
="LogonId"
type
="String(20)"
>
<
generator
class
="assigned"
/>
</
id
>
<
property
name
="UserName"
column
="UserName"
type
="String(40)"
/>
<
property
name
="Password"
type
="String(20)"
/>
</
class
>
</
hibernate-mapping
>
class我们指明了User类映射到数据库表User,id标记指明该属性对应数据库表的主键字段。
这些嵌入的Generator标记告诉NH怎样生成Primary Key.在我们举的例子中,把它设置成"assigned",意思是"我们的对象将自己生成key"。
property节点的name属性指明我们实体类的属性,column指明与该属性对应的数据库表的字段。
5:代码
protected
void
Save()
{
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration()
.SetDefaultAssembly(typeof(User).Assembly.FullName)
.SetDefaultNamespace(typeof(User).Namespace)
.AddDirectory(new System.IO.DirectoryInfo(System.Web.Hosting.HostingEnvironment.MapPath("~")));//Configuration对象知道所有在.Net类和后端数据库之间的映射关系
ISessionFactory fac = cfg.BuildSessionFactory();
ISession session = fac.OpenSession();
ITransaction tr = session.BeginTransaction();
User newUser = new User();
newUser.LogonID = "1";
newUser.UserName = "ZAKS";
newUser.PassWord = "abc123";
session.Save(newUser);
tr.Commit();
session.Close();
fac.Close();
}
常用的方法:
1. 获取记录
User user = (User)session.Get(typeof(User),1);
或者
User user = (User)session.Load(typeof(User),1);
2. 保存记录
session.Save(user);
3. 删除记录
User user = (User)session.Get(typeof(User),1);
session.Delet(User);