博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring.NET 中的 ADO.NET 数据访问的示例
阅读量:7036 次
发布时间:2019-06-28

本文共 4313 字,大约阅读时间需要 14 分钟。

Spring.NET 1.3.1 中提供了一个使用 AdoTemplate 的完整示例,包括使用泛型和使用非泛型技术进行数据访问,这个示例位于下载的压缩包中 \Spring.NET-1.3.1\Spring.NET\examples\Spring\Spring.DataQuickStart。Spring.NET 的下载地址:。示例中的数据来源于微软的示例数据库 Northwind,这个数据库可以从微软的网站下载,下载地址:

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 的代码。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
 
public
class
QueryForObjectDao : AdoDaoSupport
{
private
string
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 的派生类。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
 
<!--
连接串定义
-->
<
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]
public
void
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]
public
void
QueryForObjectDaoTest()
{
QueryForObjectDao dao
=
ctx[
"
queryForObjectDao
"
]
as
QueryForObjectDao;
Customer customer
=
dao.GetCustomer(
"
Hanna Moos
"
);
Assert.AreEqual(customer.ContactName,
"
Hanna Moos
"
);
}

转载地址:http://kojal.baihongyu.com/

你可能感兴趣的文章
安装Redis完整过程
查看>>
python在类中实现swith case功能
查看>>
SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)
查看>>
leetcode Sort List
查看>>
开源分布式存储SeaweedFS
查看>>
Servlet容器原型(二)——一个简单的连接器
查看>>
Quartz和UIKit坐标系
查看>>
Path Sum
查看>>
Spring使用Cache、整合Ehcache
查看>>
Quartz定时任务调度cron表达式时间格式
查看>>
ubuntu 安装mysql环境(离线压缩包方式)
查看>>
HTML <legend> 标签
查看>>
使用express配置前端代码服务器
查看>>
oracel设置自增ID。
查看>>
Maven com.sun.jdmk:jmxtools:jar 下载不下来
查看>>
DevExpress之Skin自定义使用
查看>>
可变参数
查看>>
[日推荐]『饿了么外卖服务』饿了么官方小程序,无需下载安装!
查看>>
Maven的学习资料收集--(四)使用Maven构建Web项目-测试
查看>>
redis安装与配置
查看>>