1、在CMS.App新增XML配置文件web_nhibernate.xml并设置为“嵌入的资源”
2、在Web.config中<spring> -> <resource>加入配置:
<resourceuri="assembly://CMS.App/CMS.App/web_nhibernate.xml"/>
3、web_nhibernate.xml中的代码:
Code
Code
<?xmlversion="1.0"encoding="utf-8"?>
<objectsxmlns=""
xmlns:db="/database">
<!--用以我们在其它的应用程序中,配置数据访问-->
<objecttype="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer,Spring.Core">
<propertyname="ConfigSections"value="databaseSettings"/>
</object>
<!--SessionFactory对象,其中包括一些比较重要的属性-->
<objectid="NHibernateSessionFactory"type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate20">
<propertyname="DbProvider"ref="DbProvider"/>
<propertyname="MappingAssemblies">
<list>
<!--NHibernate模型和相关配置文件所在的程序集-->
<value>CMS.Model</value>
</list>
</property>
<propertyname="HibernateProperties">
<dictionary>
<entrykey="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>
<entrykey="dialect"
value="NHibernate.Dialect.MsSql2000Dialect"/>
<entrykey="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"/>
</dictionary>
</property>
<propertyname="ExposeTransactionAwareSessionFactory"value="true"/>
</object>
<!--将id为NHibernateSessionFactory的对象注入到HibernateTemplate中-->
<objectid="HibernateTemplate"type="Spring.Data.NHibernate.HibernateTemplate">
<propertyname="SessionFactory"ref="NHibernateSessionFactory"/>
<propertyname="TemplateFlushMode"value="Auto"/>
<propertyname="CacheQueries"value="true"/>
</object>
</objects>
在CMS.MvcWeb中加入对CMS.Model类库的引用(加入对模型层的引用)
NHibernate配置完成,下面是测试:
在CMS.Model新增以下文件:
User.cs:
Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceCMS.Model
{
publicclassUser
{
publicintUserID
{get;set;}
publicstringUserName
{get;set;}
publicstringUserPwd
{get;set;}
}
}
User.hbm.xml:(记得要设置成“嵌入的资源”)
Code
<?xmlversion="1.0"encoding="utf-8"?>
<hibernate-mappingxmlns="urn:nhibernate-mapping-2.2">
<classname="CMS.Model.User,CMS.Model"table="t_User"lazy="false">
<idname="UserID"type="Int32"unsaved-value="0">
<columnname="tm_uid"sql-type="int"not-null="true"unique="true"/>
<generatorclass="increment"/>
</id>
<propertyname="UserName"column="tm_userName"type="System.String"length="20"/>
<propertyname="UserPwd"column="tm_userPwd"type="System.String"length="32"/>
</class>
</hibernate-mapping>
在CMS.IDAL类库中新增:
Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceCMS.IDAL
{
publicinterfaceIUserDao
{
voidSave(CMS.Model.Useruser);
}
}
在CMS.DAL类库中新增对上面接口的实现:
先引用:
CMS.Model
CMS.IDAL
spring.core
spring.data
spring.data.nhibernate20
Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingCMS.IDAL;
usingSpring.Data.NHibernate.Support;
namespaceCMS.DAL
{
publicclassUserDao:HibernateDaoSupport,IUserDao
{
#regionIUserDao成员
publicvoidSave(CMS.Model.Useruser)
{
this.HibernateTemplate.Save(user);
}
#endregion
}
}
web_business.xml:
Code
<?xmlversion="1.0"encoding="utf-8"?>
<!--业务层的对像定义DAO&Manager-->
<objectsxmlns=''>
<objectid="TestBLL"type="CMS.BLL.TestBLL,CMS.BLL">
</object>
<objectid="UserDao"type="CMS.DAL.UserDao,CMS.DAL">
<propertyname="HibernateTemplate"ref="HibernateTemplate"/>
</object>
</objects>
web_web.xml:
Code
<?xmlversion="1.0"encoding="utf-8"?>
<!--WEB层的页面对像定义-->
<objectsxmlns=''>
<objectid="Default"type="Default.aspx">
<propertyname="ITestBLL"ref="TestBLL"/>
<propertyname="IUserDao"ref="UserDao"/>
</object>
</objects>
在CMS.Web中添加好DAL,IDAL,MODEL的引用
Default.aspx.cs
Code
usingSystem.Web;
usingSystem.Web.Mvc;
usingSystem.Web.UI;
usingCMS.IBLL;
usingCMS.IDAL;
namespaceCMS.MvcWeb
{
publicpartialclass_Default:Page
{
publicITestBLLITestBLL
{get;set;}
publicIUserDaoIUserDao
{get;set;}
publicvoidPage_Load(objectsender,System.EventArgse)
{
ITestBLL.Write();
CMS.Model.Useruser=newCMS.Model.User();
user.UserName="admin";
user.UserPwd="admin888";
IUserDao.Save(user);
Response.Write("添加成功!");
//ChangethecurrentpathsothattheRoutinghandlercancorrectlyinterpret
//therequest,thenrestoretheoriginalpathsothattheOutputCachemodule
//cancorrectlyprocesstheresponse(ifcachingisenabled).
//stringoriginalPath=Request.Path;
//HttpContext.Current.RewritePath(Request.ApplicationPath,false);
//IHttpHandlerhttpHandler=newMvcHttpHandler();
//httpHandler.ProcessRequest(HttpContext.Current);
//HttpContext.Current.RewritePath(originalPath,false);
}
}
}
运行效果:
源码下载