在之前我们的Dao层只是一个空壳,仅仅返回Mock对象而已,现在真正的数据库要出马了,我们看看Spring.Net怎么和NHibernate进行整合。
首先创建hibernate.cfg.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>
<!-- 数据库相关配置 -->
<db:provider id="DbProvider"
provider="MySql-6.2.2"
connectionString="Server=127.0.0.1;Database=memobox;Uid=root;Pwd=123456;"/>
<!--SessionFactory对象,其中包括一些比较重要的属性 -->
<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<value>MemoBoxServer</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect"
value="NHibernate.Dialect.MySQL5Dialect"/>
<entry key="hibernate.connection.driver_class"
value="NHibernate.Driver.MySqlDataDriver"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
<!--将id为NHibernateSessionFactory的对象注入到HibernateTemplate中-->
<object id="HibernateTemplate" type="Spring.Data.NHibernate.HibernateTemplate">
<property name="SessionFactory" ref="NHibernateSessionFactory" />
<property name="TemplateFlushMode" value="Auto" />
<property name="CacheQueries" value="true" />
</object>
</objects>
下面我们对该文件的属性逐个说明:
DbProvider帮助我们连接数据库,他们由Spring.Net的DbProviderFactory创建,所有的DbProvider都实现了IDbProvider接口,向我们提供连接数据库、执行sql语句的方法。
关于目前版本的Spring.Net提供的DbProvider列表详见19. DbProvider
我们采用MySQL数据库,所以这里的provider选用MySql-6.2.2,你需要安装Mysql Connector 6.2.2及以上版本,数据库连接字符串按照要求填写
NHibernateSessionFactory是SessionFactory对象,MappingAssemblies标识了HNibernate在哪些程序集中寻找*.hbm.xml文件,注意这里是程序集名称,而不是命名空间名称