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文件。

三、配置文件

<?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="LIPPOR-PC\LIPPOR"/>
                <add key="db.user" value="sa"/>
                <add key="db.password" value="123"/>
                <add key="db.database" value="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会帮我们自动根据实体的结构生成数据库中的表。”

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

时间: 2024-08-06 11:56:28

SSH.net之数据访问对象(DAO)的相关文章

Yii的学习(2)--数据访问对象 (DAO)

摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS).使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码. 数据访问对象(DAO) 对访问存储在不同数据库管理系统(DBMS)中的数据提

【设计模式】数据访问对象模式

数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来.以下是数据访问对象模式的参与者. 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作. 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口.该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者

winform中利用反射实现泛型数据访问对象基类

考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <summary> /// DAO基类 实体名必须要与数据表字段名一致 /// </summary> /// <typeparam name="T"></typeparam> public class BaseDao<T> where T :

Java数据访问对象模式

数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分离. 以下是数据访问对象模式的参与者. 数据访问对象接口 - 此接口定义要对模型对象执行的标准操作. 数据访问对象具体类 - 此类实现上述接口. 这个类负责从数据源获取数据,数据源可以是数据库/xml或任何其他存储机制. 模型对象或值对象 - 此对象是简单的POJO,包含用于存储使用DAO类检索的数据的get/set方法. 实现实例 在这个将创建一个作为Model或Value对象的Student对象. StudentDao

螃蟹学PHP设计模式之数据访问对象模式

3.数据访问对象模式 今天又要上班了,不过公司的事情倒不多,先花点时间回忆之前学的两个设计模式吧......好,复习完了,开始学习新的数据访问对象模式.螃蟹发现其实之前的项目基本都用上了数据访问对象模式,因为在程序中手写sql实在是效率不高且不易于维护.这就好比你有个亲戚在美国,你每个月都想送点东西给他,然后你每次都要做飞机汽车跑到他哪儿去,东西给他再风尘仆仆地回来,结果有一天你突然发现有快递这服务,你每次把东西交给快递就啥事不管了,由此感叹真方便啊.其实螃蟹也觉得数据访问对象模式真的如同快递员

PHP设计模式系列 - 数据访问对象模式

数据访问对象模式 数据访问对象模式描述了如何创建透明访问数据源的对象. 场景设计 设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法 在实际使用的过程中,继承BaseDao,就可以直接调用基类的数据库操作方法 代码:BaseDao 数据库操作基类 <?php //数据访问对象模式 //将数据库访问层脱离出来 作为公用的访问接口,方便用户开放,是php中常用的一种设计模式 class BaseDao { private $db; public funct

Spring数据访问层Dao案例

本文描述的是通过spring框架实现数据持久化操作,具体内容如下: 1,POJO类定义: 1 import java.io.Serializable; 2 import java.util.Date; 3 4 public class User implements Serializable{ 5 private int userId; 6 7 private String userName; 8 9 private String password; 10 11 private int cred

解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro

LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. 1  LLBL Gen Pro 入门  LLBL Gen Pro Basic 打开LLBL Gen Pro程序,在右边的数据库浏览器(Catelog Explorer)中根结点右键选择从关系数据库创建关系模型( Add Relational Model Data from a Database),然

如何使用JDBC实现数据访问对象层(DAO)

JAVA是面向对象的语言,开发者在操作数据的时候,通常更习惯面对一个特定类型的对象,如一个用户就是一个User类的对象.DAO层需要做的,就是为上层提供充分的对象支持,让上层再也看不到具体的数据,而是一个个活生生的对象. 增加,删除,查询和修改操作是DAO需要做的最基本的4项操作.查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供 User泛型的list对象,对于id查询则提供已经装配好数据的User对象,至于增加和修改操作,上层一般会提供一个User对象,DAO把 User对象中