一起谈.NET技术,Nhibernate入门与demo

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

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

  1、Nhibernate是什么?

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

  3、怎么搭建Nhibernate?

  4、怎么使用Nhibernate?

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

  第一个问题:

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

      先看一张经典的图:

  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 没有层次,没有优化,只是作为入门的一个简单介绍!

    

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

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类。 代码如下:

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  代码如下:  

<?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官方文档。

  第四步:创建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">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>

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

 

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

      第四个问题:    

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

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

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

时间: 2024-10-03 04:16:06

一起谈.NET技术,Nhibernate入门与demo的相关文章

Nhibernate入门与demo 升级版

       在第一篇文章中有几个地方作为第一个Nhibernate入门demo还有很多不足!今天特意写点补充知识!请先阅读:Nhibernate入门与demo 以下是我们项目的升级的地方: 先看一下程序结构的截图: 问题一:关于hibernate.cfg.xml配置文件. 文件名称必须是hibernate.cfg.xml .Nhibernate自动到项目输出中查找此文件.必须将此文件的属性设置为始终复制. 问题二:在webconfig中配置Nhibernate,不使用单独的:hibernate

Nhibernate入门与demo

本篇文章阅读对象是:Nhibernate初学者!如果你是Nhibernate的研究者或者已经很熟练的运用Nhibernate请不吝赐教,对本文不足之处进行指教. 带着问题去学习!学完这些后,希望你能回答下面几个问题: 1.Nhibernate是什么? 2.Nhibernate能做什么?带给我们的什么? 3.怎么搭建Nhibernate? 4.怎么使用Nhibernate? 好,我们就带着这几个问题开始我们的Nhibernate的旅程. 第一个问题: 要明白Nhibernate是什么,就要首先明白

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 本篇文章的目的在于把框架自带的一些好用,封装好的一些方便开发的类库简单的说一下,灵活使用可以提高开发效率,再就是因为在交流过程中有很多童鞋提出了一些关于什么样的项目怎么用API和web端怎么使用API这类的问题,我就我的理解把我的一些想法和大家交流一下,最后是对于入门篇做一下总结,以及对后面的一些教程做一下说明. 附上: 官网地址

Ted 谈 ExtJS 4.1 入门

Ted 谈 ExtJS 4.1 入门 First Thoughts Learning Ext JS 4.1 January 17, 2012 | Ted Patrick http://www.sencha.com/blog/first-thoughts-on-ext-js/ 翻译: Ext 中文网 ajaxjs.com / sp42 转载请保留本页信息 作为学习 Sencha 的新手,我希望把我学习 ExtJS 4.1的一点一滴过程分享出来.其实在我个人开发人员的职业生涯中,曾接触过不少的开发环

云计算技术的入门理解

问题描述 云计算技术的入门理解 云计算是为什么技术服务的,求帮助.可以加我QQ914132206 . 解决方案 我就不照抄什么网上的定义了. 可以通俗的理解为通过云的方式实现无论何时何地可以用任何终端访问你所需要的任何服务.你不必再去操心什么架构.搭建.安全,及如何为用户提供服务等. 根据你所需要的服务的类别可分为三种云计算模式: 第一类是IT基础架构服务(IaaS),即将你需要的硬件进行云端化,需要虚拟化和群集技术等. 第二类是平台服务(PaaS),云提供商提供的是基础架构和操作系统,由用户自

java做水晶报表一般都用那些技术,能否提供些demo

问题描述 java做水晶报表一般都用那些技术,能否提供些demo 解决方案 解决方案二:水晶报表mark

《创业家》牛文文:少谈点模式多谈点技术

"模式"如同当年的"主义",流行于各种创业大赛.创业励志节目.论坛的"街头"式秀场 文/创业家 牛文文 "美国某某公司你知道吧?就是刚被戴尔.惠普.思科十几亿美元抢购的那家.我们的模式和它的一样,现在还没赢利,可将来起码有十几亿人民币的市值." "我开了小煤矿,但煤运不出去,上商学院之后受到启发,想搞模式创新,具体讲就是想在铁路边上搞个煤炭物流开发区,建一个大的物流和信息流平台,把分散的煤炭集中在我这个园区,这样和铁

浅谈我的Flash入门心得

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 经常看到有些朋友问如何学习flash,感觉这个问题太宽泛,下面就我做flash做了5年的个人体会,谈一下自己flash入门的一些粗浅体会. 兴趣是最好的老师,首先喜欢了,才会认真去做.上大学的时候,接触到flash, 简直是入迷一样,211.html">觉得这个软件太神奇了,能做出这么漂亮的效果,感觉很好玩.于是,下定决心,一

一起谈.NET技术,MSDN Webcast:ASP.NET MVC2程序开发入门到精通系列课程

课程讲师:苏鹏 MSDN特邀讲师北京工业大学软件工程硕士,微软最有价值专家(ASP.NET MVP),微软MSDN特约讲师.曾于微软亚洲工程院MSN组工作,现任中国网通四分公司技术支持与项目部开发经理.具有多年电信系统与OA系统实施经验. 课程下载: ASP.NET MVC2程序开发入门到精通系列课程(1):MVC架构概述 ASP.NET MVC2程序开发入门到精通系列课程(2):MVC范例分享 ASP.NET MVC2程序开发入门到精通系列课程(3):MVC中的View实现技巧(上) ASP.