zoukankan      html  css  js  c++  java
  • 一起谈.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

  • 相关阅读:
    setup命令开机启动服务配置
    setup命令网卡配置
    ARM架构与ARM内核
    菁华开示目录
    末法时代选修净土法门可得解脱
    净宗之声 | 向知识分子介绍净土法门(文声对照)
    1217. 无量寿经颂序
    150.2 重刻安士全书序二
    往生典范|黄忠昌往生记实+西方发愿文+止语的好处等
    深度揭秘|邪淫、艳遇背后的真相(影音+图文)
  • 原文地址:https://www.cnblogs.com/waw/p/2162660.html
Copyright © 2011-2022 走看看