.NET的那些事兒(4)——NHibernate中的單表操作

來源:互聯網
上載者:User

之前的文章寫的東西比較雜亂,也許很多人並不熟悉NUnit,所以本文舉的例子跟NUnit是脫離的,對於初學者而言,最主要的還是單表操作,以及明白NHibernate究竟給我們帶來了什麼革命性的勝利。希望對大家在進行NHibernate單表操作的時候有點啟發。流程大致包括

0、建立資料庫和資料表

1、建立項目NHibernateSingle

2、建立App.Config設定資料庫串連(本文使用的是SQL Server2000)

3、建立Sessions類建立Session對象

4、建立ObjectBroker類用於封裝Nhibernate操作

5、建立UserInfo類

6、建立UserInfo對應檔UserInfo.hbm.xml

7、在Main函數中添加測試代碼

0 建立資料庫和資料表

先建立資料庫,名稱取為NHibernate,然後建立資料表UserInfo.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UserInfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)<br />drop table [dbo].[UserInfo]<br />GO</p><p>CREATE TABLE [dbo].[UserInfo] (<br />[UserID] [int] IDENTITY (1, 1) NOT NULL ,<br />[UserName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,<br />[UserPwd] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,<br />[UserRole] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL<br />) ON [PRIMARY]<br />GO</p><p>

1  建立項目NHibernateSingle(如所示):注意添加引用NHibernate

2、建立App.Config設定資料庫串連(本文使用的是SQL Server2000)

<?xml version="1.0" encoding="utf-8" ?><br /><configuration></p><p> <configSections><br /> <!--定義NHibernate配置節的處理類 --><br /> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /><br /> </configSections><br /> <nhibernate><br /> <!--指定在log中是否顯示sql語句, 用於調試 --><br /> <add key="hibernate.show_sql" value="true" /><br /> <!--資料庫連接提供 --><br /> <add key="hibernate.connection.provider"<br /> value="NHibernate.Connection.DriverConnectionProvider" /><br /> <!--指定資料庫方言, NHB可以針對資料庫方言進行最佳化 --><br /> <add key="hibernate.dialect"<br /> value="NHibernate.Dialect.MsSql2000Dialect" /><br /> <!--資料驅動對象 --><br /> <add key="hibernate.connection.driver_class"<br /> value="NHibernate.Driver.SqlClientDriver" /><br /> <!--連接字串, userid和password改成你自己的哦。 --><br /> <add key="hibernate.connection.connection_string"<br /> value="Server=localhost;initial catalog=NHibernate;user id=sa;password=123;Min Pool Size=2" /><br /> </nhibernate><br /></configuration>

3、建立Sessions類建立Session對象

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using NHibernate;<br />using System.Reflection;</p><p>namespace NHibernateSingle<br />{<br /> public class Sessions<br /> {<br /> private static readonly object lockObj = new object();<br /> private static ISessionFactory _factory;</p><p> public Sessions()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }<br /> public static ISessionFactory Factory<br /> {<br /> get<br /> {<br /> if (_factory == null)<br /> {<br /> lock (lockObj)<br /> {<br /> if (_factory == null)<br /> {<br /> NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();<br /> cfg.AddAssembly(Assembly.GetExecutingAssembly());<br /> _factory = cfg.BuildSessionFactory();<br /> }<br /> }<br /> }<br /> return _factory;<br /> }<br /> }<br /> public static ISession GetSession()<br /> {<br /> return Factory.OpenSession();<br /> }</p><p> }<br />}<br />

4、建立ObjectBroker類用於封裝Nhibernate操作,再建立BizObject類用於封裝ObjectBroker類操作

ObjectBroker.cs

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using NHibernate;</p><p>namespace NHibernateSingle<br />{<br /> public class ObjectBroker<br /> {<br /> private ObjectBroker() { }</p><p> public static void Load(object obj, object id)<br /> {<br /> ISession s = Sessions.GetSession();<br /> try<br /> {<br /> s.Load(obj, id);<br /> }<br /> finally<br /> {<br /> s.Close();<br /> }<br /> }</p><p> public static void Create(object obj)<br /> {<br /> ISession s = Sessions.GetSession();<br /> ITransaction trans = null;<br /> try<br /> {<br /> trans = s.BeginTransaction();<br /> s.Save(obj);<br /> trans.Commit();<br /> }<br /> finally<br /> {<br /> s.Close();<br /> }<br /> }</p><p> public static void Update(object obj)<br /> {<br /> ISession s = Sessions.GetSession();<br /> ITransaction trans = null;<br /> try<br /> {<br /> trans = s.BeginTransaction();<br /> s.Update(obj);<br /> trans.Commit();<br /> }<br /> finally<br /> {<br /> s.Close();<br /> }<br /> }</p><p> public static void Delete(object obj)<br /> {<br /> ISession s = Sessions.GetSession();<br /> ITransaction trans = null;<br /> try<br /> {<br /> trans = s.BeginTransaction();<br /> s.Delete(obj);<br /> trans.Commit();<br /> }<br /> finally<br /> {<br /> s.Close();<br /> }<br /> }<br /> }</p><p>}<br />

BizObject.cs

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using NHibernate;<br />using NUnit.Framework;</p><p>namespace NHibernateSingle<br />{<br /> public class BizObject<br /> {<br /> public BizObject() { }</p><p> public BizObject(object existingId)<br /> {<br /> ObjectBroker.Load(this, existingId);<br /> }<br /> public virtual void Create()<br /> {<br /> ObjectBroker.Create(this);<br /> }<br /> public virtual void Update()<br /> {<br /> ObjectBroker.Update(this);<br /> }<br /> public virtual void Delete()<br /> {<br /> ObjectBroker.Delete(this);<br /> }<br /> }<br />}<br />

5、建立UserInfo類,從BizObject繼承

using System;<br />using System.Collections.Generic;<br />using System.Text;</p><p>namespace NHibernateSingle<br />{<br /> class UserInfo : BizObject<br /> {<br /> public UserInfo() : base() { }<br /> public UserInfo(int existingId) : base(existingId) { }<br /> private int _userid=0;<br /> private String _username;<br /> private String _userpwd;<br /> private String _userrole;</p><p> public int UserID<br /> {<br /> set { this._userid = value; }<br /> get { return this._userid; }<br /> }</p><p> public String UserName<br /> {<br /> set { this._username = value; }<br /> get { return this._username; }<br /> }</p><p> public String UserPwd<br /> {<br /> set { this._userpwd = value; }<br /> get { return this._userpwd; }<br /> }</p><p> public String UserRole<br /> {<br /> set { this._userrole = value; }<br /> get { return this._userrole; }<br /> }<br /> }<br />}<br />

6、建立UserInfo對應檔UserInfo.hbm.xml(檔案名稱必須保持一致)

<?xml version="1.0" encoding="utf-8" ?><br /><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"><br /> <class name="NHibernateSingle.UserInfo, NHibernateSingle" table="UserInfo" lazy="false"><br /> <id name="UserID" column="UserID" type="Int32" unsaved-value="0"><br /> <generator class="identity"/><br /> </id><br /> <property name="UserName" column="UserName" type="String" /><br /> <property name="UserPwd" column="UserPwd" type="String" /><br /> <property name="UserRole" column="UserRole" type="String" /><br /> </class><br /></hibernate-mapping>

7、在Main函數中添加測試代碼

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using NHibernate;<br />using NUnit.Framework;</p><p>namespace NHibernateSingle<br />{<br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> UserInfo u = new UserInfo();<br /> u.UserName = "rocket";<br /> u.UserPwd = "rrr";<br /> u.UserRole = "admin";<br /> u.Create();//insert操作</p><p> UserInfo u2 = new UserInfo(u.UserID);<br /> u2.UserPwd = "rrrrr";<br /> u2.Update();//update操作</p><p> UserInfo u3 = new UserInfo(u.UserID);<br /> u3.Delete();//delete操作<br /> }<br /> }<br />}<br />

結論

此時運行解決方案後,就可以在資料表中看到插入的資料,使用者可以根據以上的代碼就可以進行insert、update、delete操作了。此時我們再看一下整個解決方案的檔案組織圖,以及看到Main函數中執行的語句,大家就可以知道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.