Spring.NET 中的 ADO.NET 数据访问的示例
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 封装了 AdoTemplate。AdoDaoSupport 定义在命名空间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 数据访问的示例相关推荐
- Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
在上一篇Spring中使用JdbcTemplate访问数据库 中介绍了一种基本的数据访问方式,结合构建RESTful API和使用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App服务 ...
- boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口
Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...
- 在Spring Boot中加载初始化数据
文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...
- python抓取表格数据_Python如何实现从PDF文件中爬取表格数据(代码示例)
本篇文章给大家带来的内容是关于Python如何实现从PDF文件中爬取表格数据(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文将展示一个稍微不一样点的爬虫. 以往我们的 ...
- VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口
一.ADO.NET概述 Ado.net基于XML和离线计算模型. ADO.net的两个核心组件:.Net数据提供程序.DataSet. .net数据提供程序用来与数据库的连接,如SQLServer.n ...
- ASP.NET2.0中数据源控件之异步数据访问
IAsyncResult 在第 1 部分和第 2 部分中, 建立了 WeatherDataSource 控件,该控件针对 weather.com(英文)所提供的 XML API 来运行,使用 WebR ...
- node中http的请求数据访问在浏览器中的基本使用方法和例子/静态资源库/url的基本使用/mime.json的内容和使用方式
7.0 http 在node中的使用 7.1 http的基本演示:req:客户端请求的数据,res服务端响应的数据 let http = require("http"); // 创 ...
- ADO.net数据访问
需要引用对应命名空间:System.Data.SqlClient; SqlConnection:连接对象 SqlCommand:命令对象 SqlDataReader:读取器对象 //造连接字符串 st ...
- ADO.NET数据访问模板整理
1 /// <summary> 2 /// 数据访问类:hi_test 3 /// </summary> 4 public partial class TestDA 5 { 6 ...
最新文章
- mongodb 结果二次调用_mongodb慢查询记录
- Linux守护进程简介
- 计算机组装大赛队名,比赛项目设计及评分标准-中国海员技能大比武.DOC
- react-hooks_在5分钟内学习React Hooks-初学者教程
- 自主可控的安全关键领域国产工业软件SkyEye
- 亿万富翁Mark Cuban:比特币是像黄金一样的价值存储,更多是一种信仰
- 关于Linux基本命令
- c语言入门自学ppt,《C语言基础知识》PPT课件.ppt
- 免费计算机网络基础ppt,计算机网络基础
- 用氦气(He)、氖气(Ne)、氩气(Ar)、118号元素(气奥)(Og,放射性,人造元素)组成的激光器
- 【highcharts】highcharts(highmaps)实现疫情地图(一看就会篇)
- 电脑的wifi天线原理_详解无线路由器天线的原理
- 使用python实现的天眼查小工具
- 电脑死机怎么办?超级简单的方法
- 计算机处理器ghz,电脑CPU的GHZ代表什么?比如1.7GHZ、2.2GHZ??
- jquery tableExport 插件导出excel (无乱码) 比较简单的表格
- stm32RCT6 使用NTC热敏电阻实现温度报警器
- React中遇到的Bug——Unhandled Rejection (Error): Maximum update depth exceeded. This can happen when a com
- 对空间中6个点两两连线,用红黄两种颜色对这些边染色,则同色的三角形至少有几个?
- 智百威收银系统服务器,智百威商业连锁管理系统果蔬版
热门文章
- mysql入门到跑路_MySQL 24小时入门笔记(3),插入和删除,删库到跑路
- c语言交换两个变量的值 讲课,用C语言的泛型实现交换两个变量值
- mvn exec: java_实战|Java 测试覆盖率 Jacoco插桩的不同形式总结和踩坑记录(下)
- python:01字串
- 安全研究公司Gauntlet称轻量级区块链协议Mina的攻击成本很高
- FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
- ETH突破620美元关口 日内涨幅为5.36%
- SAP License:系统退货处理流程
- SAP License:FI常用表
- 介绍某现金贷平台的决策规则