本篇文章,讓我們一起來探索Nhibernate。
首先我們去搜索Nhibernate下載地址,如下鏈接所示。
該版本可能是最新版,我下載的4.0.4.GA。其中GA意思我沒搞清楚。不過應該不重要。
https://sourceforge.net/projects/nhibernate/
下載完成后,解壓縮如圖所示。
其中Required_Bins存儲的是類庫和其他資源;字面的意思Required,是必須文件。
打開Required文件夾,里是這樣的。
兩個類庫;兩個類庫是要被引用的。
類庫擁有對應的XML,沒找到具體使用該XML的方法。所以暫時不去理他。
NHibernate.pdb應該是沒有用的。估計是作者忘記刪除了。
nhibernate-configuration.xsd和nhibernate-mapping.xsd是要放到c盤的,路徑如下:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Xml\Schemas
因為是我用的是vs2012,所以,我找的路徑是Microsoft Visual Studio 11.0。
我上網上調查了下這兩個文件是做什么用的。調查結果是,這倆貨是【文件智能提示功能】用的。
上網調查后,發現Nhibernate有Castle框架、LinFu框架、Spring.Net三種。
看起來很復雜,不過先不去管那么多,先直接引用類庫。
然后我建立了一個類庫程序,引用Iesi.Collections.dll和NHibernate.dll兩個DLL。
接下來,我們開始建立持久化對象。
public class Test
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
對象與數據庫的映射是保存在XML文件中的,我們配置XML映射文件如下。
該XML文件的屬性,要求設置其生成操作為【嵌入的資源】。
此外,我怕它丟失,還給他設置了始終復制的屬性。
XML文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NherbinateHelper"
namespace="NherbinateHelper">
<class name ="Test">
<id name="Id" column ="Id">
<generator class ="native"/>
</id>
<property name ="Name"/>
</class>
</hibernate-mapping>
再然后,我們建立數據庫連接的類。
因為我們沒有顯示設置數據庫連接字符串,所以,我猜測這個類,會讀配置文件中SQL字符串連接。
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}
然后,我們建立domain(域),添加增刪改查的方法。
public class NHibernateSample
{
protected ISession Session { get; set; }
public NHibernateSample(ISession session)
{
Session = session;
}
public Test GetCustomerById(int Id)
{
return Session.Get<Test>(Id);
}
}
然后,我們新建一個控制台程序,用來調用這個類庫測試。
測試類代碼如下。
public class NHibernateSampleFixture
{
private NHibernateSample _sample;
public NHibernateSampleFixture()
{
_sample = new NHibernateSample(new NHibernateHelper().GetSession());
}
public void GetCustomerByIdTest()
{
var tempCutomer = new Test { Name = "李" };
_sample.CreateCustomer(tempCutomer);
Test customer = _sample.GetCustomerById(1);
int customerId = customer.Id;
}
}
調用如下:
class Program
{
static void Main(string[] args)
{
NHibernateSampleFixture f = new NHibernateSampleFixture();
f.GetCustomerByIdTest();
}
}
測試結果是失敗,因為缺少配置數據庫連接的文件。
現在我們打開文件夾Configuration_Templates,發現Configuration_Templates文件夾下有如下文件。
我使用的數據庫是sqlserver,所以,我復制了mssql.cfg.xml。
然后將復制的文件,黏貼到測試的控制台程序下,然后改名為《hibernate.cfg.xml》。
這里測試了下,貌似不改名不好使,配置文件內容如下
【PS:我始終沒搞懂,XML中的CFG代表什么意思。】
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">
Server=SKY-20160718RXO\SA;initial catalog=Nherbinate;Integrated Security=SSPI;
</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
<mapping assembly="NherbinateHelper"/>
</session-factory>
</hibernate-configuration>
我連接的是sqlserver2012,所以配置文件里,我有做修改,修改驅動為NHibernate.Dialect.MsSql2012Dialect。原始版是2008。
其中<mapping assembly="NherbinateHelper"/>是后加的,原文件里沒有。
這句話的意思是,映射我創建的那個類庫。
我推斷,Nherbinate是讀這個配置文件,然后到這個程序集里,反射查詢那些poco對象。
最后,nhibernate-configuration-2.2這句話我想了很久要不要改成4.0。
結果是我沒改,測試一切正常。可以順利使用。
結語
這是一場Nhibernate探索之旅,結果是非常順利的配置成功了。
作者:Kiba518
鏈接:https://www.imooc.com/article/43748
來源:慕課網
本文首次發布於慕課網 ,轉載請注明出處,謝謝合作