Nhibernate简单 例子
1.创建web应用程序NHibernate.Demo.QuickStart和一个类库项目NHibernate.Demo.QuickStartClassLib
2.引程序集
3..创建数据库,数据表
USE [dbNHibernateDemo]
GO
/****** Object: Table [dbo].[Hksj_User] Script Date: 11/01/2013 11:35:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Hksj_User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[SName] [nvarchar](20) NOT NULL,
[SNickName] [nvarchar](20) NULL,
[SPassWord] [nvarchar](30) NOT NULL,
[DCreateDate] [datetime] NULL,
[SCreator] [nvarchar](20) NULL,
[SEmail] [nvarchar](50) NULL,
[SPhone] [nvarchar](50) NULL,
[SIdentifyId] [nvarchar](30) NULL,
[DLastTimeLogOn] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
3.设计User类。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NHibernate.Demo.QuickStartClassLib
{
public class User
{
#region 属性,字段定义
/// <summary>
/// 用户id
/// </summary>
public Int32 Id
{
get;
set;
}
/// <summary>
/// 用户名,登录所用的名字
/// </summary>
public string Name
{
get;
set;
}
/// <summary>
/// 真实姓名
/// </summary>
public string NickName
{
get;
set;
}
/// <summary>
/// 密码
/// </summary>
public string PassWord
{
get;
set;
}
/// <summary>
/// 创建日期
/// </summary>
public DateTime CreateTime
{
get;
set;
}
/// <summary>
/// 创建人
/// </summary>
public string Creator
{
get;
set;
}
/// <summary>
/// </summary>
public string Email
{
get;
set;
}
/// <summary>
/// 联系电话
/// </summary>
public string Phone
{
get;
set;
}
/// <summary>
/// 身份证
/// </summary>
public string IdentifyId
{
get;
set;
}
/// <summary>
/// 最后一次登录时间
/// </summary>
public DateTime LastTimeLogOn
{
get;
set;
}
#endregion
}
}
4.创建User类的映射文件 命名规则:User.hbm.xml 代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NHibernate.Demo.QuickStartClassLib.User,NHibernate.Demo.QuickStartClassLib" table="Hksj_User" lazy="false">
<id name="Id" column="Id" type="Int32">
<generator class="native"/>
</id>
<property name="Name" column="SName" type="String" length="20" />
<property name="NickName" column="SNickName" type="String" length="20" />
<property name="PassWord" column="SPassWord" type="String" length="30" />
<property name="IdentifyId" column="SIdentifyId" type="String" length="30" />
<property name="Phone" column="SPhone" type="String" length="50" />
<property name="Email" column="SEmail" type="String" length="50" />
<property name="CreateTime" column="DCreateDate" type="DateTime" />
<property name="Creator" column="SCreator" type="String" length="20" />
<property name="LastTimeLogOn" column="DLastTimeLogOn" type="DateTime" />
</class>
</hibernate-mapping>
5.创建Nhibernate的配置文件:Nhibernate.cfg.xml 代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<!-- properties -->
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=DAN-PC\;Initial Catalog=dbNHibernateDemo;Integrated Security=True;</property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
<property name="show_sql">true </property>
<property name="use_outer_join">true</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<!-- 代理工厂,可以试用Castle,也可以试用LinFu -->
<!-- <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>-->
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<!-- mapping files 领域对象映射文件所在程序集 -->
<mapping assembly="NHibernate.Demo.QuickStart"/>
</session-factory>
</hibernate-configuration>
解释:
<property name="connection.connection_string">数据库连接字符串
<property name="dialect">NHibernate.Dialect.MySQLDialect</property> 数据库类型。我用的sql server 2008R2
(更具体节点配置参照http://blog.csdn.net/nileel/article/details/2192306)
<mapping assembly="NHibernate.Demo.QuickStart"/>节点是web应用程序所在程序集 。
6.User.hbm.xml属性修改
7.Nhibernate.cfg.xml属性修改
8.到此Nhibernate所有准备工作已完成。可以写具体的CRUD代码。(这里我只增加一条数据,查询特定用户并在GridView上简单展示)
后台代码如下:
namespace NHibernate.Demo.QuickStart
{
public partial class _Default : System.Web.UI.Page
{
public IList<User> cUsers = null;
protected void Page_Load(object sender, EventArgs e)
{
NHibernate.Cfg.Configuration cfg=new NHibernate.Cfg.Configuration();//Configuration对象知道所有在.net类和后端数据库之间的映射关系
string path = Server.MapPath("~") + "Nhibernate.cfg.xml";
cfg.Configure(path);//Could not compile the mapping document: NHibernate.Demo.QuickStart.User.hbm.xml
//Could not load type NHibernate.Dialect.MsSql2008Dialect. Possible cause: no assembly name specified.
//改为 <property name="dialect">NHibernate.Dialect.MySQLDialect</property> 即可
ISessionFactory sessionFactory = cfg.BuildSessionFactory();//建立Session工厂
ISession session = sessionFactory.OpenSession();//打开session
NHibernate.Demo.QuickStartClassLib.User user = new NHibernate.Demo.QuickStartClassLib.User { IdentifyId = "009", Email = "dan@qq.com", CreateTime = DateTime.Now, LastTimeLogOn = DateTime.Now, Name = "dan", NickName = "dandan", PassWord = "123", Phone = "nihao" };
session.Save(user);
session.Flush();
IList<User> users = null;
IQuery query = session.CreateQuery("from User u where u.Id>=:id");
query.SetInt32("id", 2);
users = query.List<User>();
cUsers = users;
gvData.DataSource = cUsers;
gvData.DataBind();
}
}
}
9.可参考资料:
http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html
http://blog.csdn.net/nileel/article/details/2192306