背景
这一章主要介绍了Spring对持久化技术的支持,让我们更加专注于业务层的编码,避免繁琐的配置流程。
1.Spring的DAO理念
在UserDao中定义访问User数据对象的接口方法,业务层通过UserDao操作数据,并使用具体的持久化技术
实现UserDao接口方法,这样业务层和具体的持久化技术就实现了解耦。
2.统一的异常体系
(1)Spring提供了一套和实现技术无关的、面向DAO层语义的异常体系,并通过转换器将不同持久化技术的异常转
换成Spring的异常。
Spring的异常体系建立在运行期异常的基础上,开发者可以根据需要捕捉感兴趣的异常。通过getCause()方法
获取原始的异常信息。
(2)JDBC的异常转换器
在org.springframework.jdbc.support包中定义了SQLExceptionTranslator接口,该接口的两个实现类
SQLErrorCodeSQLExceptionTranslator和SQLStateSQLExceptionTranslator分别处理SQLException
中错误码和SQL状态码的翻译工作。
(3)其他持久化技术的异常转换器
3.统一数据访问模板
(1)固定的部分在模板类中已经准备好,而变化的部分通过回调接口开放出来,用于定义具体数据
访问和结果返回的操作。
(2)模板类:
在回调中编写具体的数据操作逻辑,使用模板执行数据操作,在Spring中,这是典型的数据操作模式。
(3)支持类: 不但包含数据访问模板,还包含数据源或会话等内容。通过扩展支持类定义自己的数据访问类
是最简单的数据访问方式。
4.数据源
Spring在第三方依赖包中包含了两个数据源的实现类包,一个是Apache的DBCP,另一个是C3P0。
(1)DBCP:
提高性能的配置建议:将testOnBorrow设置为false,而将testWhileIdle设置为true,再设置timeBetweenEvictionRunsMillis值。
配置的效果是DBCP将通过一个后台线程定时地对空闲连接进行检测,当发现无用的空闲连接(那些被数据库关闭的连接)时,
就会将他们清除。
(2)使用属性文件:
将数据源的配置信息独立到一个属性文件中,通过<context:property-placeholder>引入属性文件,以${xxx}的方式引用属性。
(3)获取JNDI数据源:
如果应用配置在高性能的应用服务器上,则可能希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI开放
调用者使用,Spring为此专门提供了引用JNDI数据源的JndiObjectFactoryBean类。
通过jndiName指定引用的JNDI数据源名称。也可以通过jee命名空间,简化javaee资源的引用。
(4)Spring的数据源实现类:
DriverManagerDataSource,位于org.springframework.jdbc.datasource包中。它没有提供池化连接机制,每次调用
getConnection()方法获取新连接时,只是简单地创建一个新的连接。比较适合在单元测试或独立应用中使用。
总结
Spring为了使不同的持久化技术能以统一的方式去使用,定义了Spring异常体系,模板类和回调接口,数据源。