Spring.NET 1.3.1 中提供了一个使用 AdoTemplate 的完整示例,包括使用泛型和使用非泛型技术进行数据访问,这个示例位于下载的压缩包中\Spring.NET-1.3.1\Spring.NET\examples\Spring\Spring.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");            }

转载于:https://www.cnblogs.com/zwb7926/p/3571242.html

Spring.NET 中的 ADO.NET 数据访问的示例相关推荐

  1. Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅

    在上一篇Spring中使用JdbcTemplate访问数据库 中介绍了一种基本的数据访问方式,结合构建RESTful API和使用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App服务 ...

  2. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...

  3. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  4. python抓取表格数据_Python如何实现从PDF文件中爬取表格数据(代码示例)

    本篇文章给大家带来的内容是关于Python如何实现从PDF文件中爬取表格数据(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文将展示一个稍微不一样点的爬虫. 以往我们的 ...

  5. VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口

    一.ADO.NET概述 Ado.net基于XML和离线计算模型. ADO.net的两个核心组件:.Net数据提供程序.DataSet. .net数据提供程序用来与数据库的连接,如SQLServer.n ...

  6. ASP.NET2.0中数据源控件之异步数据访问

    IAsyncResult 在第 1 部分和第 2 部分中, 建立了 WeatherDataSource 控件,该控件针对 weather.com(英文)所提供的 XML API 来运行,使用 WebR ...

  7. node中http的请求数据访问在浏览器中的基本使用方法和例子/静态资源库/url的基本使用/mime.json的内容和使用方式

    7.0 http 在node中的使用 7.1 http的基本演示:req:客户端请求的数据,res服务端响应的数据 let http = require("http"); // 创 ...

  8. ADO.net数据访问

    需要引用对应命名空间:System.Data.SqlClient; SqlConnection:连接对象 SqlCommand:命令对象 SqlDataReader:读取器对象 //造连接字符串 st ...

  9. ADO.NET数据访问模板整理

    1 /// <summary> 2 /// 数据访问类:hi_test 3 /// </summary> 4 public partial class TestDA 5 { 6 ...

最新文章

  1. mongodb 结果二次调用_mongodb慢查询记录
  2. Linux守护进程简介
  3. 计算机组装大赛队名,比赛项目设计及评分标准-中国海员技能大比武.DOC
  4. react-hooks_在5分钟内学习React Hooks-初学者教程
  5. 自主可控的安全关键领域国产工业软件SkyEye
  6. 亿万富翁Mark Cuban:比特币是像黄金一样的价值存储,更多是一种信仰
  7. 关于Linux基本命令
  8. c语言入门自学ppt,《C语言基础知识》PPT课件.ppt
  9. 免费计算机网络基础ppt,计算机网络基础
  10. 用氦气(He)、氖气(Ne)、氩气(Ar)、118号元素(气奥)(Og,放射性,人造元素)组成的激光器
  11. 【highcharts】highcharts(highmaps)实现疫情地图(一看就会篇)
  12. 电脑的wifi天线原理_详解无线路由器天线的原理
  13. 使用python实现的天眼查小工具
  14. 电脑死机怎么办?超级简单的方法
  15. 计算机处理器ghz,电脑CPU的GHZ代表什么?比如1.7GHZ、2.2GHZ??
  16. jquery tableExport 插件导出excel (无乱码) 比较简单的表格
  17. stm32RCT6 使用NTC热敏电阻实现温度报警器
  18. React中遇到的Bug——Unhandled Rejection (Error): Maximum update depth exceeded. This can happen when a com
  19. 对空间中6个点两两连线,用红黄两种颜色对这些边染色,则同色的三角形至少有几个?
  20. 智百威收银系统服务器,智百威商业连锁管理系统果蔬版

热门文章

  1. mysql入门到跑路_MySQL 24小时入门笔记(3),插入和删除,删库到跑路
  2. c语言交换两个变量的值 讲课,用C语言的泛型实现交换两个变量值
  3. mvn exec: java_实战|Java 测试覆盖率 Jacoco插桩的不同形式总结和踩坑记录(下)
  4. python:01字串
  5. 安全研究公司Gauntlet称轻量级区块链协议Mina的攻击成本很高
  6. FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
  7. ETH突破620美元关口 日内涨幅为5.36%
  8. SAP License:系统退货处理流程
  9. SAP License:FI常用表
  10. 介绍某现金贷平台的决策规则