Spring JDBC抽象框架简化Web数据库开发(3)
2008-02-23 08:11:30来源:互联网 阅读 ()
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceDBDirect"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<bean id="tasksDAO" class="com.spring.jdbc.TasksJdbcDAO">
<property name="dataSource">
<ref local="dataSourceDBDirect"/>
</property>
</bean>
<bean id="service" class="com.spring.jdbc.ServiceImpl">
<property name="tasksDao">
<ref local="tasksDAO"/>
</property>
</bean>
</beans>
我们看到服务bean使得tasksDao bean被注入-它反过来又使dataSourceDBDirect对象被注入。当我们请求服务bean时,我们通过一个具有DataSource的DAO得到它。至此,一切就绪。因此,当客户端存取bean容器以得到服务对象时,会发生什么呢?该bean容器实例化并且注入一个DataSource和一个TasksDAO-在把服务返回到客户端之前。现在,我们的客户端变得相当简单了。它需要与BeanFactory进行通讯,"抓住"一个服务对象并处理它:
package com.spring.jdbc;
import java.util.Iterator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client extends RuntimeException {
public static void main(String[] args) throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("SpringConfig.xml");
Service service = (Service)ctx.getBean("service");
Iterator tskIter = service.getTasksNames().iterator();
while (tskIter.hasNext()) {
System.out.println(tskIter.next().toString());
}
}
}
你必须注意,在此Client派生于RuntimeException异常类。Spring抛出了RuntimeExceptions而不是检查的异常-RuntimeExceptions不应该被捕获。由于在你的代码中捕获所有异常是一种复杂的任务,所以Spring开发者决定抛出RuntimeExceptions以便实现如果你不捕获一个异常的话,那么你的应用程序将会中断而且用户会得到该应用程序异常。使用它们的第二个理由是,绝大多数异常都是不可恢复的,因此你的应用程序逻辑不能以任何方式来再次处理它们。
五. 另外的优点
除了上面描述的Spring框架带给JDBC中的优点外,与你的JDBC应用程序一起使用Spring框架还存在另外一些优点。这些优点包括:
· Spring框架提供了
org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor接口和这个接口的一些实现(例如SimpleNativeJdbcExtractor)。对于经由一个Oracle连接或ResultSet访问Oracle特征的情况来说,这些内容是非常有用的。
· 对于创建oracle.sql.BLOB(二进制大型对象)和oracle.sql.CLOB(字符大型对象)实例来说,Spring提供了类org.springframework.jdbc.support.lob.OracleLobHandler。
· Spring提供的OracleSequenceMaxValueIncrementer类提供了一个Oracle序列的下一个值。它有效地提供了与你直接使用下列命令:"select someSequence.nextval from dual"(其中,someSequence是在Oracle数据库中的你的序列的名字)所提供的一样的信息。这种方法的优点是,DataFieldMaxValueIncrementer接口可以用于一个DAO层次中而不必紧密地耦合于Oracle特定的实现。
六. 结论
本文集中讨论了使用Spring来编写更可维护的和更不易出现错误的JDBC代码。Spring JDBC提供了一些优点,例如更为干净的代码,更好的异常与资源处理,并且能够集中于业务问题而不是复杂的任务代码。另外,值得注意的是,使用Spring框架能够使用极少的代码就可以实现实质上与传统型JDBC相同的功能。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
