目录
Spring.Net+Nhibernate+ASP.MVC+EasyUI实践(一)
Spring.Net+Nhibernate+ASP.MVC+EasyUI实践(二)
Spring.Net+Nhibernate+ASP.MVC+EasyUI实践(三)
Spring.Net+Nhibernate+ASP.MVC+EasyUI实践(四)
上一篇博客对该项目的基层代码进行编写,这一章节将对MVC4.0项目中编写代码:
1.首先添加spring.net对MVC的注入
(1)添加引用spring.web.mvc3.dll(也可以用spring.web.mvc4,主要是Nuget里还没有更新mvc4),Nuget自动安装其依赖对象
(2)Homecontroll添加一个属性
public class HomeController : Controller
{
public string Message { get; set; }
public ActionResult Index()
{
ViewBag.Message = this.Message;
return View();
}
……
(2)新增文件夹Configs,添加文件Controllers.xml,修改属性为嵌入资源
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object type="FinanceWebSys.Controllers.HomeController,FinanceWebSys" singleton="false">
<property name="Message" value="Spring.NET 1.3.2 的 ASP.NET MVC 依赖注入" />
</object>
</objects>
(3)修改Global.asax,使得MvcApplication :继承SpringMvcApplication
public class MvcApplication : SpringMvcApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
(4)配置web.config
<configuration>
<configSections>
……
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc3"/>
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="file://~/Configs/Controllers.xml"/>
</context>
</spring>
……
</configuration>
(5)效果如图:
2.spring对NHibernate的注入:在上面基础上添加引用Model,IBLL,BLL,NHibernateDao,Npgsql.dll(注意Npgsql不能用Nuget来安装,因为spring.data.Nhibernate32最多支持Npgsql2.0.0.0)
(1)在Configs文件夹添加Repository.xml和Manager.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database">
<!-- 用以我们在其它的应用程序中,配置数据访问 -->
<object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer,Spring.Core">
<property name="ConfigSections" value="databaseSettings"/>
</object>
<!-- 数据库和Nhibernate的相关配置 -->
<db:provider id="DbProvider" provider="${provider}" connectionString="${connectionString}"/>
<!--SessionFactory对象,其中包括一些比较重要的属性 -->
<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate32">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<!--这是配置嵌入资源的xx类对应的xx.hbm.xml文件所在的项目名称-->
<value>FinanceWebSys.Model</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="Nhibernate.Connection.DriverConnectionProvider"/>
<!--数据库方言-->
<entry key="dialect" value="${dialect}" />
<!--数据库驱动-->
<entry key="hibernate.connection.driver_class" value="${driver_class}" />
</dictionary>
</property>
</object>
<object id="HibernateTemplate" type="Spring.Data.NHibernate.Generic.HibernateTemplate">
<property name="SessionFactory" ref="NHibernateSessionFactory" />
<property name="TemplateFlushMode" value="Auto" />
<property name="CacheQueries" value="true" />
</object>
<object id="UserDepInfoRepository" type="FinanceWebSys.NhibernateDao.UserDepInfoRepository,FinanceWebSys.NhibernateDao">
<property name="HibernateTemplate" ref="HibernateTemplate"/>
</object>
</objects>
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32">
<property name="DbProvider" ref="DbProvider"/>
<property name="SessionFactory" ref="NHibernateSessionFactory"/>
</object>
<object id="transactionInterceptor" type="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data">
<property name="TransactionManager" ref="transactionManager"/>
<property name="TransactionAttributeSource">
<object type="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data"/>
</property>
</object>
<!--事物管理器-->
<object id="BaseTransactionManager" type="Spring.Transaction.Interceptor.TransactionProxyFactoryObject, Spring.Data" abstract="true">
<property name="PlatformTransactionManager" ref="transactionManager"/>
<property name="TransactionAttributes">
<name-values>
<!--增加-->
<add key="Save*" value="PROPAGATION_REQUIRED"/>
<!--修改-->
<add key="Update*" value="PROPAGATION_REQUIRED"/>
<!--删除-->
<add key="Delete*" value="PROPAGATION_REQUIRED"/>
<!--获取-->
<add key="Get*" value="PROPAGATION_REQUIRED"/>
<!--浏览-->
<add key="Find*" value="PROPAGATION_SUPPORTS,readOnly"/>
<!--检索-->
<add key="Search*" value="PROPAGATION_SUPPORTS,readOnly"/>
<!--报表-->
<add key="Query*" value="PROPAGATION_SUPPORTS,readOnly"/>
<!--载入-->
<add key="Load*" value="PROPAGATION_SUPPORTS,readOnly"/>
<!--报表-->
<add key="Report*" value="PROPAGATION_SUPPORTS,readOnly"/>
<!--其它-->
<add key="*" value="PROPAGATION_REQUIRED"/>
</name-values>
</property>
</object>
<object id="UserDepInfoManager" parent="BaseTransactionManager">
<property name="Target">
<object type="FinanceWebSys.BLL.UserDepInfoManager,FinanceWebSys.BLL">
<property name="CurrentRepository" ref="UserDepInfoRepository"/>
</object>
</property>
</object>
</objects>
(2)修改web.config
<configSections>
……
<!--spring对mvc的注入-->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc3" />
</sectionGroup>
<!--数据库设置-->
<section name="databaseSettings" type="System.Configuration.NameValueSectionHandler" />
……
</configSections>
<!--spring的配置文件-->
<spring>
<context>
<!--Web-->
<resource uri="file://~/Configs/Controllers.xml" />
<!--BLL-->
<resource uri="file://~/Configs/Manager.xml" />
<!--Dao-->
<resource uri="file://~/Configs/Repository.xml" />
</context>
</spring>
<!--数据库连接字符串-->
<databaseSettings>
<add key="provider" value="Npgsql-2.0" />
<add key="connectionString" value="Server=127.0.0.1;Port=5432;User Id=postgres;Password=zllzh;Database=FinanceWebDb;" />
<add key="dialect" value="NHibernate.Dialect.PostgreSQLDialect" />
<add key="driver_class" value="NHibernate.Driver.NpgsqlDriver" />
</databaseSettings>
还有两个功能暂时不清楚用法,可以暂时不加进去
<appSettings>
<!--spring新增-->
<add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="NHibernateSessionFactory" />
</appSettings>
<system.web>
<!--新增-->
<httpModules>
<add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate32" />
</httpModules>
……
</system.web>
(3)修改HomeController
public class HomeController : Controller
{
public string Message { get; set; }
public IUserDepInfoManager UserDepInfoManager { get; set; }
public ActionResult Index()
{
var a = UserDepInfoManager.Get(1);
ViewBag.Message = a.DepName + a.Id;
//ViewBag.Message = this.Message;
return View();
}
(4)修改Controllers.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object type="FinanceWebSys.Controllers.HomeController,FinanceWebSys" singleton="false">
<property name="Message" value="Spring.NET 1.3.2 的 ASP.NET MVC 依赖注入" />
<property name="UserDepInfoManager" ref="UserDepInfoManager"/>
</object>
</objects>
3.最后看看效果
数据库里随意插入两条数据:
运行:成功了
补充:自动建表和配置log4net
1.自动建表
(1)修改web.config
<!--数据库连接字符串-->
<databaseSettings>
……
<!--自动建表-->
<add key="hbm2ddl.auto" value="update" />
……
</databaseSettings>
(2)修改Repository.xml,添加自动建表<entry key="hbm2ddl.auto" value="${hbm2ddl.auto}"/>
<dictionary>
……
<!--自动建表(反向映射)-->
<entry key="hbm2ddl.auto" value="${hbm2ddl.auto}"/>
</dictionary>
2.配置log4net
修改web.confg ,下一篇这里给出完整版的web.config