首页 > 代码库 > SSH.net之数据访问对象(DAO)

SSH.net之数据访问对象(DAO)

一、新建一个类库,命名为:DAO

二、新建接口:IRepository

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Repository{    public interface IRepository<T>    {        void Delete(T entity);        T Get(object id);        object Save(T entity);        void Update(T entity);    }}

实现该接口

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Spring.Data.NHibernate.Generic.Support;//引用Spring.Data.NHibernate21.dllnamespace Repository{    public class NHibernateRepository<T> : HibernateDaoSupport,IRepository<T>    {        public void Delete(T entity)        {            this.HibernateTemplate.Delete(entity);        }        public T Get(object id)        {            return this.HibernateTemplate.Get<T>(id);        }        public object Save(T entity)        {            return this.HibernateTemplate.Save(entity);        }        public void Update(T entity)        {            this.HibernateTemplate.Update(entity);        }    }}

在这里,同样继承了HibernateDaoSupport类,后面配置文件中将使用该类中的HibernateTemplate属性。该类的引用需要引入Spring.Data.NHibernate21.dll文件。

三、配置文件

<?xml version="1.0" encoding="utf-8" ?><objects xmlns="http://www.springframework.net"         xmlns:db="http://www.springframework.net/database">    <!-- 用以我们在其它的应用程序中,配置数据访问        如:我们在MVCDemo项目中添加数据库连接,则这样配置:        <configuration>            <databaseSettings>                <add key="db.datasource" value="http://www.mamicode.com/LIPPOR-PC/LIPPOR"/>                <add key="db.user" value="http://www.mamicode.com/sa"/>                <add key="db.password" value="http://www.mamicode.com/123"/>                <add key="db.database" value="http://www.mamicode.com/SpringNetDB"/>            </databaseSettings>        </configuration>        就可以将数据传递过来    -->    <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">        <property name="ConfigSections" value="databaseSettings"/>    </object>    <!-- 数据库和Nhibernate的相关配置 -->    <db:provider id="DbProvider" provider="SqlServer-2.0"                 connectionString="Server=${db.datasource};database=${db.database};uid=${db.user};pwd=${db.password};"/>    <!--SessionFactory对象,其中包括一些比较重要的属性 -->    <object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate21">        <!-- 关于数据库连接的配置,直接使用 DbProvider 中的设置,这样,不需要为 Hibernate 再提供连接串和驱动 -->        <property name="DbProvider" ref="DbProvider"/>        <!-- 包含有映射文件的程序集,需要分析的hbm程序集名称 -->        <property name="MappingAssemblies">            <list>                <value>Model</value>            </list>        </property>        <property name="HibernateProperties">            <dictionary>                <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>                <entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>                <entry key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>                <entry key="use_outer_join" value="true"/>                <entry key="show_sql" value="false"/>                <!--自动建表(反向映射)-->                <entry key="hbm2ddl.auto" value="update"/>                <entry key="adonet.batch_size" value="10"/>                <entry key="command_timeout" value="60"/>                <!--显式启用二级缓存-->                <entry key="cache.use_second_level_cache" value="true"/>                <!--启动查询缓存-->                <entry key="cache.use_query_cache" value="false"/>                <entry key="query.substitutions" value="true 1, false 0, yes ‘Y‘, no ‘N"/>                <entry key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>            </dictionary>        </property>        <!-- 与 Spring 的声明式事务集成 -->        <property name="ExposeTransactionAwareSessionFactory" value="true" />    </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="dao.users" type="Repository.NHibernateRepository&lt;Model.Users>, Repository">        <property name="HibernateTemplate" ref="HibernateTemplate"/>    </object>    <object id="dao.roles" type="Repository.NHibernateRepository&lt;Model.Roles>, Repository">        <property name="HibernateTemplate" ref="HibernateTemplate"/>    </object>    <object id="dao.permission" type="Repository.NHibernateRepository&lt;Model.Permission>, Repository">        <property name="HibernateTemplate" ref="HibernateTemplate"/>    </object></objects>

 

 

刘东老师的播客里有这么段注释:

 “NHibernate中的Session控制取决于SessionFactory,Spring.NET提供了LocalSessionFactoryObject类来统一管理SessionFactory。其中MappingAssemblies属性为实体程序集的名称,可以填写多个名称。HibernateProperties为NHibernate的配置,dialect属性为数据库的方言,因为是SQL server 2K数据库,所以使用NHibernate.Dialect.MsSql2000Dialect 。proxyfactory.factory_class属性为延迟加载的代理类驱动,在NHibernate 2.1版中必须配置。hbm2ddl.auto属性为反向建立映射表的配置,我们配置为update后,NHibernate会帮我们自动根据实体的结构生成数据库中的表。

最后,设置配置文件的属性:

 

SSH.net之数据访问对象(DAO)