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對多表關聯處理還不是很好,需借用第三方外掛程式,還有待進一步研究.