DoNet資料持久層架構的集大成者–Nhibernate

來源:互聯網
上載者:User

Nhibernate是一個面向.NET環境的對象/關聯式資料庫映射工具.對象/關聯式資料庫映射(object/relational mapping (ORM))這個術語表示一種技術,用來把物件模型表示的對象映射到基於SQL的關聯式模式資料結構中去。

上面可能說得很抽象,我解釋一下,為什麼用Nhibernate省時省力.
如果在沒有用Nhibernate的時候,如果往資料庫中插入一條資料,我們可能會要寫一個SQL語句,寫的時候要瞭解資料表結構,然後這樣寫:
insert into 表名 ([欄位1],[欄位2]) values ('"&頁面參數1&"','"&頁面參數2&"')
寫的時候還要考慮到語句的正確性,這是比較簡單的SQL語句,如果再複雜一點的話,對於編程人員來說很是麻煩.

有了Nhibernate,我們就可以不管這些了,因為Nhibernate將資料庫的增,刪,查,改都封裝好了,我們只要提供對象屬性給它,其他就交給Nhibernate去處理了,這就大大減輕的程式員的負擔.

我們來進入實戰,分為以下幾步:
1.到網上下載Nhibernate類庫,因為調用的時候要引用nhibernate的dll檔案.可以到它的官方首頁上去下載
http://www.nhibernate.org/.主要核心dll有如下幾個:
NHibernate.dll,log4net.dll,Iesi.Collections.dll,Castle.DynamicProxy.dll

2.建立資料庫logging,建立一個簡單的使用者表,欄位如下:
Create Table Users(
LogonID varchar(20) Primary key,
Name varchar(40),
Password varchar(20),
EmailAddress varchar(40) ,
LastLogon datetime
)

3.開啟vs2005,建立一個網站項目NhibernateDemo,這裡採用三層結構,模型層(Model),資料訪問層(DAL),商務邏輯層(BLL).將以上的dll添加到引用中.否則編譯報錯.
建立使用者模型:
using System;
namespace NHibernateWebDemo.Model
{
public class User
{
  public User()
  {
  }
  private string id;
  private string userName;
  private string password;
  private string emailAddress;
  private DateTime lastLogon;
  public string Id
  {
   get { return id; }
   set { id = value; }
  }

  public string UserName
  {
   get { return userName; }
   set { userName = value; }
  }

  public string Password
  {
   get { return password; }
   set { password = value; }
  }

  public string EmailAddress
  {
   get { return emailAddress; }
   set { emailAddress = value; }
  }

  public DateTime LastLogon
  {
   get { return lastLogon; }
   set { lastLogon = value; }
  }
}
}

4.構建一個可以讓NHibernate知道如何完成ORM映射的XML檔案
該xml需要手寫,也可用專業的工具去產生,這裡我推薦CodeSmith Professional 4.1
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
        <class name="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model" table="users" lazy="false">
        
               <id name="Id" column="LogonId" type="String" length="20">
                       <generator class="assigned" />
               </id>
                
               <property name="UserName" column= "Name" type="String" length="40"/>
               <property name="Password" type="String" length="20"/>
               <property name="EmailAddress" type="String" length="40"/>
               <property name="LastLogon" type="DateTime"/>
        </class>
</hibernate-mapping>

5.建立資料訪問層,這一層比較複雜.首先要給出Nhibernate資料抽象工廠,其作用是根據需要執行個體化Nhibernate對象,便於調用Nhibernate裡的方法,給出部分代碼:
public static ISession OpenSession(string AssemblyName)'開啟session,其作用就像先開啟資料庫連接一樣
  {
   if(sessions == null)
   {
    lock(padlock)
    {
     if(sessions == null)
     {
      BuildSessionFactory(AssemblyName);
     }
    }
   }
   return sessions.OpenSession();
  }

  private static void BuildSessionFactory(string AssemblyName)'建立session工廠,初始化配置
  {
   cfg = new Configuration();
   cfg.AddAssembly(AssemblyName);
   sessions = cfg.BuildSessionFactory();
  }
6.下面就開始編寫一些增,刪,查,改的方法了
如果增加資料,可以編寫如下代碼:
public void AddEntity(Object entity)
  {
   ISession session = SessionFactory.OpenSession(_AssemblyName);'調用抽象工廠裡的方法
   ITransaction transaction = session.BeginTransaction();'交易回復
   try
   {
    session.Save(entity);'這裡是save方法,很簡單,儲存資料啦,不需要編寫sql語句,很強
    transaction.Commit();
   }
   catch(Exception ex)
   {
    transaction.Rollback();
    throw ex;
   }
   finally
   {
    session.Close();
   }
  }
7.在商務邏輯層去調用這個方法
using System;
using System.Collections;
using NHibernateWebDemo.DAL;
using NHibernateWebDemo.Model;
namespace NHibernateWebDemo.BLL
{
public class UserBLL
{
  public void AddUser(User user)
  {
   UserDAL dal = new UserDAL();        
   dal.AddUser(user);
  }
}
}
這個執行個體是個很簡單的例子,通過它我們可以看到nhibernate減輕了程式員的大量重複勞動.不用考慮sql語句就可以執行資料的各種操作了,但是nhibernate對多表關聯處理還不是很好,需借用第三方外掛程式,還有待進一步研究.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.