本文不将介绍NHibernate是什么,这个在其帮助中讲得非常清楚,本人下载中提供v2.0.0的帮助文档免费下载,地址为http://down.51cto.com/data/224472

配置

本人使用的LinFu动态代理,NHibernate的版本为v2.2,在工程中引用Iesi.Collections.dll、LinFu.DynamicProxy.dll、log4net.dll、NHibernate.ByteCode.LinFu.dll、NHibernate.dll五个dll,接下来配置web.config如下:

  1. <?xml version="1.0"?> 
  2. <configuration> 
  3.     <configSections> 
  4.         <section name="hibernate-configuration"  
  5. type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/> 
  6. ... 
  7.     </configSections> 
  8.     <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
  9.         <session-factory> 
  10.             <property name="connection.provider">
  11. NHibernate.Connection.DriverConnectionProvider</property> 
  12.             <property name="dialect"> 
  13.                 NHibernate.Dialect.Oracle10gDialect 
  14.             </property> 
  15.             <property name="connection.driver_class"> 
  16.                 NHibernate.Driver.OracleClientDriver 
  17.             </property> 
  18.             <property name="connection.connection_string"> 
  19.                 Data Source=sid;User ID=username;Password=passwd
  20. Persist Security Info=true;Unicode=True</property> 
  21.             <property name="proxyfactory.factory_class"> 
  22. NHibernate.ByteCode.LinFu.ProxyFactoryFactory, 
  23. NHibernate.ByteCode.LinFu 
  24.             </property> 
  25.             <property name="show_sql">true</property> 
  26.             <mapping assembly="GXSN.CMS.NH.Oracle"/> 
  27.         </session-factory> 
  28.     </hibernate-configuration> 
  29. </configuration> 

其中,GXSN.CMS.NH.Oracle是映射XML所在工程的工程名。

基本用法

在配置完成后,一般实际应用过程中,会将NHibernate单独封装为一个工程,作为NHibernate数据访问辅助类,在本人下载中已提供参考工程,见下载地址http://down.51cto.com/data/220594,此工程名为GXSN.DataAccess.NH.Util,组成如下图:

NHibernate基础_Hibernate

其中

NHibernateHelper<T>:NHibernate数据访问辅助泛型单件类,实现查询与非查询功能,完成依赖NHibernate库,NHibernate库内置接口到此结束,不对系统其它部分造污染,更好地做到整个系统对NHibernate库依赖,而是依赖自定义的Oper<T>类和enumOperation枚举,为系统以后在数据访问中的演化提供条件;
Oper<T>:原子操作描述泛型类,包括业务实体和操作类型,依赖enumOperation枚举;
enumOperation:操作枚举。

在引用NHibernate数据访问辅助类后,如在添加学生信息中,写好XML映射文件(关于XML映射文件参考帮助文档),再只需要如下代码完成即完成:

  1. GXSN.DataAccess.NH.Util.NHibernateHelper<GXSN.CMS.Entity.ContentClassInfo>.
  2. Instance.NonQuery(GXSN.DataAccess.NH.Util.enumOperation.Save, studentInfo); 

P.S. 在使用过程中,需要治理好代码的相互依赖关系,否则会为以期系统的演化带来灾难。还有就是NH是最终被翻译为ado.net进行执行,个人感觉不一定比ado.net快,只不过有的地方使用起来方便点,