您的位置:首页 > 编程语言 > Java开发

Spring.NET 整合Nhibernate

2014-01-24 16:34 281 查看
因为最近无意中学了AOP ,所以想一探究竟,看看.net里这个Spring.Net 到底是怎么回事,请有需要的童鞋往下,不需要的请alt+w。因为是先配置的 Nhibernate 所以就从这个开始。开发环境:VS2012

1. 下载Nhibernate 我这里用的是 NHibernate-3.3.2.GA-bin

2. 添加映射文件 *.hbm.xml 当然 你可以使用映射或者其他一些方式 不过这个比较常用 需要注意的地方有如下几点:

1.这个映射文件需要在属性中设置为 嵌入的资源,如果丢了这一步 可能会异常。

2. 在映射文件里, 程序集以及命名空间很重要。

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="TestNHISpringIntegral.Core" namespace="TestNHISpringIntegral.Core.Model">

这个对应的是model的。

3. 列名一定要对应上,主键外键这些的设置也要注意,在这里就不再赘述。 例子如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="TestNHISpringIntegral.Core" namespace="TestNHISpringIntegral.Core.Model">

<class name="Author" table="Authors" lazy="false" >
<cache usage="read-write"/>
<id name="Id" column="Id" type="Int32">
<generator class="identity"/>
</id>
<property name="FirstName" length="50"  type="String" column="FirstName"  />
<property name="LastName" length="50"  type="String" column="LastName" />

</class>
</hibernate-mapping>


3.添加 NHibernate 配置文件 从配置模板里复制出对应的配置文件,我这里是sql2005,请童鞋参照自己的数据库进行设置,注意 将此文件放到bin里面,这样方便读取,还要在app.config 或者web.config 里设置下section,因为顺序是先单独配置,然后进行整合所以可能在后续的内容里会重新设置,请童鞋注意。section 必须是放在最前面 否则依然会报错

1.在app.config 或者web.config里添加如下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
</configuration>


2.修改数据库相关配置:

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.connection_string">Server=.\SQLEXPRESS;Database=BookDemo;Integrated Security=SSPI</property>

<!--<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="adonet.batch_size">10</property>
<property name="show_sql">false</property>
<property name="use_outer_join">true</property>
<property name="command_timeout">60</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Spring.ProxyFactoryFactory, NHibernate.ByteCode.Spring</property>-->

<!-- mapping files 关键配置,否则出异常:No persister for -->
<mapping assembly="TestNHISpringIntegral.DAO" />
</session-factory>
</hibernate-configuration>


上面注释掉的内容都是在配置完成之后正式使用的时候才需要的内容,所以我这里全部注释掉了。

4.到这里 NHibernate 就配置完成了,童鞋们可以写代码自己测试下 我的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;

namespace TestNhibreateWithConsole
{
public  class ConfigurationHelper
{
private Configuration _config;

private static ISessionFactory _sessionFactory;
public ConfigurationHelper()
{
_config=new Configuration();
}

private  ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
_config= new Configuration().Configure();
_sessionFactory = _config.BuildSessionFactory();
}
return _sessionFactory;
}
}
public  ISession OpenSession()
{
return SessionFactory.OpenSession();
}

}
}


页面上如下:

static void Main(string[] args)
{
using (var sessionFactory = new ConfigurationHelper().OpenSession())
{

var user = sessionFactory.CreateCriteria<R.Books>();
var auList = user.List<R.Books>();
auList.ToList().ForEach(au => Trace.WriteLine(au.Publisher));

}

}


忘记说明一点 因为这个NHibernate 依赖其他程序集 请一并进行引用。到这里NHibernate 配置就完成了,下面是spring.net 的配置

5. 引用spring.net 相关程序集,因为我这里是使用的web测试的 所以将一些文件都分开了,我的文件目录如图:

<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 -->

<configuration>

<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
<section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/>
</sectionGroup>

<section name="databaseSettings" type="System.Configuration.NameValueSectionHandler"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

</configSections>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<spring>
<parsers>
<parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"/>
<parser type="Spring.Transaction.Config.TxNamespaceParser, Spring.Data"/>
</parsers>
<context>
<resource uri="assembly://TestNHISpringIntegral.Core/TestNHISpringIntegral.Core/Repository.xml"/>
<resource uri="assembly://TestNHISpringIntegral.Bll/TestNHISpringIntegral.Bll/Manager.xml"/>
</context>

</spring>

<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %logger - %message%newline" />
</layout>
</appender>

<!-- Set default logging level to DEBUG -->
<root>
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
</root>

<!-- Set logging for Spring.  Logger names in Spring correspond to the namespace -->
<logger name="Spring">
<level value="INFO" />
</logger>

<logger name="Spring.Data">
<level value="DEBUG" />
</logger>

<logger name="NHibernate">
<level value="INFO" />
</logger>

</log4net>
<databaseSettings>
<add key="db.datasource" value=".\SQLEXPRESS" />
<add key="db.database" value="BookDemo" />
<add key="db.user" value="sa"/>
<add key="db.password" value="123456"/>
</databaseSettings>

<!--<runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>

<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />

<bindingRedirect oldVersion="0.0.0.0-3.3.1.4000" newVersion="3.3.1.4000" />

</dependentAssembly>

</assemblyBinding>

</runtime>-->

</configuration>


View Code

里面的程序集

<context>
<resource uri="assembly://TestNHISpringIntegral.Core/TestNHISpringIntegral.Core/Repository.xml"/>
<resource uri="assembly://TestNHISpringIntegral.Bll/TestNHISpringIntegral.Bll/Manager.xml"/>
</context>


对应的是前面添加的配置文件,请配置正确,否则也会报错跑不起来,这里因为我忘记具体的错误了,所以只是提醒大家注意这里,这样整个就贯穿起来了。

页面代码:

log4net.Config.XmlConfigurator.Configure();
IApplicationContext applicationContext = ContextRegistry.GetContext();
authorManager = (IAuthor)applicationContext.GetObject("AuthorManager");
var authorM=authorManager.Get(2);
Response.Write(authorM.FirstName+"^^^^^^^");


到此全部完成,至于MVC 只是调用所以就没写上来,大家自己去整合,如果有问题请留言大家一起探讨,不喜勿喷。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: