本文不将介绍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如下:
- <?xml version="1.0"?>
- <configuration>
- <configSections>
- <section name="hibernate-configuration"
- type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
- ...
- </configSections>
- <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
- <session-factory>
- <property name="connection.provider">
- NHibernate.Connection.DriverConnectionProvider</property>
- <property name="dialect">
- NHibernate.Dialect.Oracle10gDialect
- </property>
- <property name="connection.driver_class">
- NHibernate.Driver.OracleClientDriver
- </property>
- <property name="connection.connection_string">
- Data Source=sid;User ID=username;Password=passwd;
- Persist Security Info=true;Unicode=True</property>
- <property name="proxyfactory.factory_class">
- NHibernate.ByteCode.LinFu.ProxyFactoryFactory,
- NHibernate.ByteCode.LinFu
- </property>
- <property name="show_sql">true</property>
- <mapping assembly="GXSN.CMS.NH.Oracle"/>
- </session-factory>
- </hibernate-configuration>
- </configuration>
其中,GXSN.CMS.NH.Oracle是映射XML所在工程的工程名。
基本用法
在配置完成后,一般实际应用过程中,会将NHibernate单独封装为一个工程,作为NHibernate数据访问辅助类,在本人下载中已提供参考工程,见下载地址http://down.51cto.com/data/220594,此工程名为GXSN.DataAccess.NH.Util,组成如下图:
其中
NHibernateHelper<T>:NHibernate数据访问辅助泛型单件类,实现查询与非查询功能,完成依赖NHibernate库,NHibernate库内置接口到此结束,不对系统其它部分造污染,更好地做到整个系统对NHibernate库依赖,而是依赖自定义的Oper<T>类和enumOperation枚举,为系统以后在数据访问中的演化提供条件;
Oper<T>:原子操作描述泛型类,包括业务实体和操作类型,依赖enumOperation枚举;
enumOperation:操作枚举。
在引用NHibernate数据访问辅助类后,如在添加学生信息中,写好XML映射文件(关于XML映射文件参考帮助文档),再只需要如下代码完成即完成:
- GXSN.DataAccess.NH.Util.NHibernateHelper<GXSN.CMS.Entity.ContentClassInfo>.
- Instance.NonQuery(GXSN.DataAccess.NH.Util.enumOperation.Save, studentInfo);
P.S. 在使用过程中,需要治理好代码的相互依赖关系,否则会为以期系统的演化带来灾难。还有就是NH是最终被翻译为ado.net进行执行,个人感觉不一定比ado.net快,只不过有的地方使用起来方便点,
\
本文转自 彭金华 51CTO博客,原文链接:http://blog.51cto.com/pengjh/613106