Nhibernate入门与demo

      学习和使用Nhibernate已经很久了,一直想写点东西和大家一起学习使用Nhibernate。博客园里也有很多大牛写了很多关于Nhibernate入门的文章。其中:李永京的博客http://www.cnblogs.com/lyj/tag/NHibernate/  内容最为丰富。而且在李哥的博客里面学了很多东西,在此致谢!

      本篇文章阅读对象是:Nhibernate初学者!如果你是Nhibernate的研究者或者已经很熟练的运用Nhibernate请不吝赐教,对本文不足之处进行指教。

     带着问题去学习!学完这些后,希望你能回答下面几个问题:

     1、Nhibernate是什么?

     2、Nhibernate能做什么?带给我们的什么?

     3、怎么搭建Nhibernate?

     4、怎么使用Nhibernate?

     好,我们就带着这几个问题开始我们的Nhibernate的旅程。

    第一个问题:

     要明白Nhibernate是什么,就要首先明白什么是ORM。

      先看一张经典的图:

2010091615361932.png

     ORM:对象关系映射(O/R Mapping,Object Relational Mapping)表示一种技术,用来把对象模型表示的对象映射到基于SQL 的关系模型数据结构中去。通俗讲,就是我们操作实体类,然后让ORM框架自动映射到数据库中。

     而Nhibernate就是:.Net环境下实现ORM的技术的一个框架!

     第二个问题:

     Nhibernate能做什么呢?

     看下面代码:

 
  
User myUser = new User();
// User初始化........
session.Save(myUser); // 保存一个用户
session.Update(myUser); // 更新用户
session.Delete(myUser); // 删除用户
User user = session.Get < User > (Id) as User; // 根据主键获取用户的 用户实例

      session哇!这么牛,不用写一句sql   session就帮你把所有的活都干了!那session设计肯定很难吧?告诉你吧,session是我们只需要一个配置文件就可以随处调用了。这么神奇?

     Nhibernate带给我们的就是:对于开发者通常的数据持久化相关的编程任务,解放其中的95%!

     第三个问题:

     这是本文的关键,是怎么搭建呢?

     先看项目整体图,作为初学的demo 没有层次,没有优化,只是作为入门的一个简单介绍!

     2010091617341971.png

     第一步:设计数据库中的表。建立一个User表。代码如下:    

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
CREATE TABLE Hksj_User
(
Id
INT IDENTITY ( 1 , 1 ) NOT NULL , -- id主键
SName NVARCHAR ( 20 ) NOT NULL , -- 用户名
SNickName NVARCHAR ( 20 ), -- 真实姓名
SPassWord NVARCHAR ( 30 ) NOT NULL , -- 密码
DCreateDate DATETIME , -- 创建 日期
SCreator NVARCHAR ( 20 ), -- 创建人
SEmail NVARCHAR ( 50 ), -- Email
SPhone NVARCHAR ( 50 ), -- 电话
SIdentifyId NVARCHAR ( 30 ), -- 身份证
DLastTimeLogOn DATETIME -- 上次登录日期

PRIMARY KEY CLUSTERED
(
Id
ASC
)
WITH (IGNORE_DUP_KEY = OFF ) ON [ PRIMARY ]
)
ON [ PRIMARY ]
END

    第二步:设计User类。 代码如下:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyWeb.WebTemp.Model
{
public class User
{
/// <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 ;
}
}
}

     第三步:创建User类的映射文件 命名规则:User.hbm.xml  代码如下:    

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
<? xml version="1.0" encoding="utf-8" ?>
< hibernate-mapping xmlns ="urn:nhibernate-mapping-2.2" >
< class name ="MyWeb.WebTemp.Model.User,MyWeb.WebTemp.Model" 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 >

     简单解释一下:

      1、<property name="Email" column="SEmail" type="String" length="50" />    意思: property name指的是:User类的属性名字 Email对应数据库的列SEmail 类型是String,长度50个字符。

     2、<class name="MyWeb.WebTemp.Model.User,MyWeb.WebTemp.Model" table="Hksj_User" lazy="false">

         这个是配置类的全名称,以及所属的程序集。然后对应数据库的表名。设置延迟加载为false。具体可以参考Nhibernate官方文档。

     3、一定要将这个文件的属性:生成操作设置为嵌入资源!

     第四步:创建Nhibernate的配置文件:hibernate.cfg.xml   代码如下:    

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
<? 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" > server=.;uid=sa;pwd=123;database=HkTemp; </ property >
< property name ="dialect" > NHibernate.Dialect.MsSql2005Dialect </ 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 ="NhibernateDemo" />
</ session-factory >
</ hibernate-configuration >

解释:

1、<!-- mapping files 领域对象映射文件所在程序集 -->

    <mapping assembly="NhibernateDemo"/>  这是将User.hbm.xml所在的程序集。Nhibernate自动去找Mapping映射!

2、<property name="connection.connection_string">server=.;uid=sa;pwd=123;database=HkTemp;</property>是配置数据库连接字符串。

其他的都是Nhibernate最重要的数据库provider,sessionfactory等。不详细说。看官方文档!

      第四个问题:    

      使用和测试你的配置【可以爽一把了!】

     在Default.aspx   代码文件中添加如下代码

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
Configuration cfg = new Configuration();
cfg.Configure(Server.MapPath("~") + "Nhibernate.cfg.xml");
ISessionFactory _SessionFactory = cfg.BuildSessionFactory();//建立Session工厂
ISession session = _SessionFactory.OpenSession();//打开Session
MyWeb.WebTemp.Model.User myUser = new User {IdentifyId="122222",Email="22222",CreateTime=DateTime.Now, LastTimeLogOn = DateTime.Now, Name= "ml",NickName="malun",PassWord="123",Phone="nihao" };
session.Save(myUser);
session.Flush();
session.Delete(User);

     查看数据库中,有没有一条数据保存了?

     Nhibernate做的不只是这些!搭载Spring.Net  Nhibernate能做的更多!而且代码会更加优美!

 

     源码下载:NhibernateDemo.zip

转载于:https://www.cnblogs.com/fly_dragon/archive/2010/09/16/1828192.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值