zoukankan      html  css  js  c++  java
  • 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.dll
    
    namespace 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文件。

    三、配置文件

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <objects xmlns="http://www.springframework.net"
     3          xmlns:db="http://www.springframework.net/database">
     4     <!-- 用以我们在其它的应用程序中,配置数据访问
     5         如:我们在MVCDemo项目中添加数据库连接,则这样配置:
     6         <configuration>
     7             <databaseSettings>
     8                 <add key="db.datasource" value="LIPPOR-PCLIPPOR"/>
     9                 <add key="db.user" value="sa"/>
    10                 <add key="db.password" value="123"/>
    11                 <add key="db.database" value="SpringNetDB"/>
    12             </databaseSettings>
    13         </configuration>
    14         就可以将数据传递过来
    15     -->
    16     <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
    17         <property name="ConfigSections" value="databaseSettings"/>
    18     </object>
    19 
    20     <!-- 数据库和Nhibernate的相关配置 -->
    21     <db:provider id="DbProvider" provider="SqlServer-2.0"
    22                  connectionString="Server=${db.datasource};database=${db.database};uid=${db.user};pwd=${db.password};"/>
    23 
    24     <!--SessionFactory对象,其中包括一些比较重要的属性 -->
    25     <object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate21">
    26         <!-- 关于数据库连接的配置,直接使用 DbProvider 中的设置,这样,不需要为 Hibernate 再提供连接串和驱动 -->
    27         <property name="DbProvider" ref="DbProvider"/>
    28         <!-- 包含有映射文件的程序集,需要分析的hbm程序集名称 -->
    29         <property name="MappingAssemblies">
    30             <list>
    31                 <value>Model</value>
    32             </list>
    33         </property>
    34 
    35         <property name="HibernateProperties">
    36             <dictionary>
    37                 <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
    38                 <entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>
    39                 <entry key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
    40                 <entry key="use_outer_join" value="true"/>
    41                 <entry key="show_sql" value="false"/>
    42                 <!--自动建表(反向映射)-->
    43                 <entry key="hbm2ddl.auto" value="update"/>
    44                 <entry key="adonet.batch_size" value="10"/>
    45                 <entry key="command_timeout" value="60"/>
    46                 <!--显式启用二级缓存-->
    47                 <entry key="cache.use_second_level_cache" value="true"/>
    48                 <!--启动查询缓存-->
    49                 <entry key="cache.use_query_cache" value="false"/>
    50                 <entry key="query.substitutions" value="true 1, false 0, yes 'Y', no 'N"/>
    51                 <entry key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
    52             </dictionary>
    53         </property>
    54         <!-- 与 Spring 的声明式事务集成 -->
    55         <property name="ExposeTransactionAwareSessionFactory" value="true" />
    56     </object>
    57 
    58     <object id="HibernateTemplate" type="Spring.Data.NHibernate.Generic.HibernateTemplate">
    59         <property name="SessionFactory" ref="NHibernateSessionFactory" />
    60         <property name="TemplateFlushMode" value="Auto" />
    61         <property name="CacheQueries" value="true" />
    62     </object>
    63 
    64     <!--id:名称,供Service项目中service.xml引用
    65     type:类型。格式为  "命名空间.类名,程序集名称"-->
    66     <object id="dao.users" type="DAO.NHibernateRepository&lt;Model.Users>, DAO">
    67         <!--HibernateTemplate:好像Spring.Data.NHibernate.Generic.HibernateTemplate类中属性名称,必须对应,所有不能修改-->
    68         <!--ref对应上面ID为HibernateTemplate的object-->
    69         <property name="HibernateTemplate" ref="HibernateTemplate"/>
    70     </object>
    71 
    72     <object id="dao.roles" type="DAO.NHibernateRepository&lt;Model.Roles>, DAO">
    73         <property name="HibernateTemplate" ref="HibernateTemplate"/>
    74     </object>
    75 
    76     <object id="dao.permission" type="DAO.NHibernateRepository&lt;Model.Permission>, DAO">
    77         <property name="HibernateTemplate" ref="HibernateTemplate"/>
    78     </object>
    79 </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会帮我们自动根据实体的结构生成数据库中的表。

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

  • 相关阅读:
    Python 学习目录
    Django目录
    SQLAlchemy
    Flask之Sqlalchemy
    Websocket
    Mongodb
    虚拟环境
    Github
    LINUX
    内存管理和垃圾回收机制
  • 原文地址:https://www.cnblogs.com/lippor/p/4138212.html
Copyright © 2011-2022 走看看