Spring 对 ADO.NET 提供了强大的支持,主要涉及到下面的几个类型。
这次,在引用
Spring.Core
的基础上,还要引用 Spring.Data,这个程序集也位于 Spring.NET-1.3.1\Spring.NET\bin\net\4.0\release 中。
几个常用的类型
IDbProvider
IDbProvider 定义了数据访问提供器的基础,在 Spring 中提供了许多的数据访问 Provider。
通常我们在配置文件中配置当前使用的 Provider。
1
<?
xml version="1.0" encoding="utf-8"
?>
2 < configuration >
3 < configSections >
4 < sectionGroup name ="spring" >
5 < section name ="context" type ="Spring.Context.Support.ContextHandler, Spring.Core" />
6 < section name ="objects" type ="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
7 </ sectionGroup >
8 </ configSections >
9 < spring >
10 < context >
11 < resource uri ="config://spring/objects" />
12 </ context >
13
14 < objects xmlns ="http://www.springframework.net"
15 xmlns:db ="http://www.springframework.net/database"
16 >
17 < db:provider id ="DbProvider"
18 provider ="System.Data.SqlClient"
19 connectionString ="server=.\sqlexpress;database=douban;integrated security=true;" />
20
21 < object id ="adoTemplate" type ="Spring.Data.Core.AdoTemplate, Spring.Data" >
22 < property name ="DbProvider" ref ="DbProvider" />
23 </ object >
24
25 </ objects >
26 </ spring >
27 </ configuration >
2 < configuration >
3 < configSections >
4 < sectionGroup name ="spring" >
5 < section name ="context" type ="Spring.Context.Support.ContextHandler, Spring.Core" />
6 < section name ="objects" type ="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
7 </ sectionGroup >
8 </ configSections >
9 < spring >
10 < context >
11 < resource uri ="config://spring/objects" />
12 </ context >
13
14 < objects xmlns ="http://www.springframework.net"
15 xmlns:db ="http://www.springframework.net/database"
16 >
17 < db:provider id ="DbProvider"
18 provider ="System.Data.SqlClient"
19 connectionString ="server=.\sqlexpress;database=douban;integrated security=true;" />
20
21 < object id ="adoTemplate" type ="Spring.Data.Core.AdoTemplate, Spring.Data" >
22 < property name ="DbProvider" ref ="DbProvider" />
23 </ object >
24
25 </ objects >
26 </ spring >
27 </ configuration >
第 17-19 行就是在配置文件中定义的 Provider。
在程序中我们可以类似于获取普通对象一样来获取这个 Provider.
Spring.Context.IApplicationContext context
= Spring.Context.Support.ContextRegistry.GetContext();
Spring.Data.Common.IDbProvider provider = context.GetObject("DbProvider")
as Spring.Data.Common.IDbProvider;
AdoTemplate
AdoTemplate 有两个,一个泛型,定义为:Spring.Data.Generic.AdoTemplate。一个非泛型,定义为:Spring.Data.Core.AdoTemplate。
在程序中,我们可以通过下面的代码来创建 AdoTemplate 对象。
Spring.Context.IApplicationContext context
= Spring.Context.Support.ContextRegistry.GetContext();
Spring.Data.Common.IDbProvider provider = context.GetObject("DbProvider")
as Spring.Data.Common.IDbProvider;
Spring.Data.Core.AdoTemplate ado = new Spring.Data.Core.AdoTemplate(provider);
当然,在 Spring 中,我们一般通过注入来完成这些工作。配置文件中可以如下配置:
1
<
db:provider
id
="DbProvider"
2 provider ="System.Data.SqlClient"
3 connectionString ="server=.\sqlexpress;database=douban;integrated security=true;" />
4
5 < object id ="adoTemplate" type ="Spring.Data.Core.AdoTemplate, Spring.Data" >
6 < property name ="DbProvider" ref ="DbProvider" />
7 </ object >
2 provider ="System.Data.SqlClient"
3 connectionString ="server=.\sqlexpress;database=douban;integrated security=true;" />
4
5 < object id ="adoTemplate" type ="Spring.Data.Core.AdoTemplate, Spring.Data" >
6 < property name ="DbProvider" ref ="DbProvider" />
7 </ object >
现在的 5,6,7 行完成对非泛型 AdoTemplate 的注入。
这样,我们在程序中可以直接取得一个 AdoTemplate 的对象实例了。直接使用以下,是不是比 SQLHelper 好用多了。
Spring.Data.Core.AdoTemplate adoTemplate
= context.GetObject("adoTemplate") as Spring.Data.Core.AdoTemplate;
object result = adoTemplate.ExecuteScalar(
System.Data.CommandType.Text,
"select count(*) from tbl_users"
);