Nhibernate入門與demo

作者: FlyDragon  來源: 博客園  發布時間: 2010-09-19 13:31  閱讀: 1636 次  推薦: 1   原文鏈接   [收藏]  
摘要:學習和使用Nhibernate已經很久了,一直想寫點東西和大家一起學習使用Nhibernate。本篇文章是關于Nhibernate入門的文章。

  本篇文章閱讀對象是: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

1
0
 
標簽:Nhibernate
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()