zoukankan      html  css  js  c++  java
  • Spring.NET 中的 ADO.NET 数据访问的示例

    Spring.NET 1.3.1 中提供了一个使用 AdoTemplate 的完整示例,包括使用泛型和使用非泛型技术进行数据访问,这个示例位于下载的压缩包中Spring.NET-1.3.1Spring.NETexamplesSpringSpring.DataQuickStart。Spring.NET 的下载地址:http://www.springframework.net/download.html。示例中的数据来源于微软的示例数据库 Northwind,这个数据库可以从微软的网站下载,下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyId=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

    Spring.NET 提供了两种风格的 ADO.NET 访问,第一种 template 风格,通过一个单例的 AdoTemplate 应用在所有的数据访问实现中,AdoTemplate 提供了通过一个方法调用来完成数据访问的机制,这个机制类似于微软的 DAAB。这个类位于命名空间 Spring.Data.Core,在程序集Spring.Data 中。另外一种方式更加面向对象一些,比如通过 AdoQuery 来完成查询任务,而 AdoNonQuery 完成创建、更新、删除任务,存储过程则通过 StoredProcedure 来完成。这几个类都定义在命名空间 Spring.Data.Objects 中,位于程序集 Spring.Data

    在 Spring.NET 中,为了方便使用 AdoTemplate,使用 AdoDaoSupport 封装了 AdoTemplateAdoDaoSupport 定义在命名空间Spring.Data.Core 下,具体的定义如下:

    public class AdoDaoSupport : DaoSupport
    {
        private AdoTemplate adoTemplate;
     
        public IDbProvider DbProvider
        {
            set
            {
                adoTemplate = CreateAdoTemplate(value);
            }
            get
            {
                if (adoTemplate != null)
                {
                    return adoTemplate.DbProvider;
                }
                else
                {
                    return null;
                }
            }
     
        }
     
        public AdoTemplate AdoTemplate
        {
            set
            {
                adoTemplate = value;
            }
            get
            {
                return adoTemplate;
            }
     
        }
     
        protected override void CheckDaoConfig()
        {
            if (adoTemplate == null)
            {
                throw new ArgumentException("DbProvider or AdoTemplate is required");
            }
        }
     
        protected IDbConnection Connection
        {
            get
            {
                return ConnectionUtils.GetConnection(DbProvider);
            }
        }
     
        protected IAdoExceptionTranslator ExceptionTranslator
        {
            get
            {
                return null//Investigate AdoExceptionTranslator on AdoAccessor
            }
        }
     
        protected void DisposeConnection(IDbConnection conn, IDbProvider dbProvider)
        {
            ConnectionUtils.DisposeConnection(conn, dbProvider);
        }
             
            
        protected virtual AdoTemplate CreateAdoTemplate(IDbProvider dbProvider)
        {
            return new AdoTemplate(dbProvider);
        }
     
        protected virtual IDbParametersBuilder CreateDbParametersBuilder()
        {
            return new DbParametersBuilder(DbProvider);
        }
     
        protected virtual IDbParameters CreateDbParameters()
        {
            return AdoTemplate.CreateDbParameters();
        }
             
    }

    通常情况下,我们从 AdoDaoSupport 派生一个用于数据访问的类,这样就可以直接通过 AdoDaoSupport 来使用 AdoTemplate 了。例如,示例中的 QueryForObjectDao 的代码。

    复制代码
    publicclass QueryForObjectDao : AdoDaoSupport
    {
    privatestring cmdText =@"select Address, City, CompanyName, ContactName, "+
    "ContactTitle, Country, Fax, CustomerID, Phone, PostalCode, "+
    "Region from Customers where ContactName = @ContactName";

    public Customer GetCustomer(string contactName)
    {
    return (Customer)AdoTemplate.QueryForObject(CommandType.Text, cmdText, new CustomerRowMapper(),
    "ContactName", DbType.String, 30, contactName);
    }
    }
    复制代码

    在配置文件中使用依赖注入分别定义 dbProvider, adoTemplate 和 AdoDaoSupport 的派生类。

    复制代码
    <!-- 连接串定义 -->
    <db:provider id="dbProvider"
    provider
    ="System.Data.SqlClient"
    connectionString
    ="Data Source=.SQL2005;Initial Catalog=Northwind;Persist Security Info=True;User ID=springqa;Password=springqa;Trusted_Connection=False"/>
    <!-- AdoTemplate 定义 -->
    <object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data">
    <!-- 注入连接 -->
    <property name="DbProvider" ref="dbProvider"/>
    <property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/>
    </object>

    <!-- 查询定义 -->
    <object id="queryForObjectDao" type="Spring.DataQuickStart.Dao.Template.QueryforObjectDao, Spring.DataQuickStart">
    <!-- 注入 AdoTemplate -->
    <property name="AdoTemplate" ref="adoTemplate"/>
    </object>
    复制代码

    测试程序中,首先初始化 Spring 容器。这里的配置文件是嵌入在程序集中的。

    复制代码
    [SetUp]
    publicvoid InitContext()
    {
    // Configure Spring programmatically
    NamespaceParserRegistry.RegisterParser(typeof(DatabaseNamespaceParser));
    ctx
    =new XmlApplicationContext(
    "assembly://Spring.DataQuickStart.Tests/Spring.DataQuickStart.Template/ExampleTests.xml");
    adoTemplate
    = ctx["adoTemplate"] as AdoTemplate;
    }
    复制代码

    在代码中,就可以通过容器直接取得  QueryForObjectDao 对象使用了。

    复制代码
    [Test]
    publicvoid QueryForObjectDaoTest()
    {
    QueryForObjectDao dao
    = ctx["queryForObjectDao"] as QueryForObjectDao;
    Customer customer
    = dao.GetCustomer("Hanna Moos");
    Assert.AreEqual(customer.ContactName,
    "Hanna Moos");
    }
    复制代码
  • 相关阅读:
    js库链接
    小程序实现textarea行数自动增加
    小程序中公告消息自动向左滚动(关闭三次之后不再提示公告信息)
    jQuery实现点击div外的区域,来隐藏指定节点
    Unity AssetBundle爬坑手记
    换装demo随手记
    Untiy PoolManager随手记
    unity常用插件
    Untiy一些方法前特殊标签记录
    Unity网格合并_材质合并
  • 原文地址:https://www.cnblogs.com/zwb7926/p/3571242.html
Copyright © 2011-2022 走看看