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 封装了 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 的代码。
![ContractedBlock.gif](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
在配置文件中使用依赖注入分别定义 dbProvider, adoTemplate 和 AdoDaoSupport 的派生类。
![ContractedBlock.gif](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
测试程序中,首先初始化 Spring 容器。这里的配置文件是嵌入在程序集中的。
在代码中,就可以通过容器直接取得 QueryForObjectDao 对象使用了。