Nhibernate第一次做的Demo

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>

        /// Email

        /// </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













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值