集成 Spring Framework 和 Data Studio (二)

用 Spring JdbcTemplate 实现相同的应用程序

通过 Spring JdbcTemplate 的支持可以减少冗余代码,同时也获得 Spring 管理特性带来的好处。

  • 没有更改的内容:
    • 所有用户定义接口。
  • 更改的内容:
    • DAO 实现文件已经变得非常小——已将所有重复的 JDBC 代码移至 Spring。
    • 由于没有必要分配和发布 JDBC 资源,不会发生资源泄漏。
    • 不必解释 SQLExceptions。Spring 已经帮助 DB2 这些主要 DBMS 完成了这个工作。
    • 这个应用程序并不局限于特定的 DBMS 或数据访问实现。现在它由可以编辑的配置文本文件控制。

将要重用来自最后一节的 Bean 和接口类。需要添加或修改下面的组件:

  • 一个更加简单的 DAO 实现 —— AccountDao.java
  • 稍微修改应用程序,使它可以加载 Spring 配置文件,而不是直接实例化 DAO 对象 —— AccountApp.java
  • 能够动态地配置数据源和 DAO 实现的配置文件 —— applicationContext.xml,jdbc.properties。

应用程序只加载了配置文件,并且让 Spirng 实例化 DAO 实现。Data Source 配置(比如 DBMS 供应商或连接信息)已经从 DAO 实现代码中移出,并放置到 Spring 配置文件中。

 

DAO 实现

模板 JDBC 代码已经替换成 Spring JdbcTemplate。因此,不再需要通过实现代码来获得连接、捕获 SQL 异常、遍历结果集或清理资源。一个简单的 queryForList(String sql) 调用返回一个映射列表。可以通过 RowMapper 将每个返回的行映射到 bean 类。清单 5 给出了一个使用 Spring JdbcTemplate 的 DAO 实现。

 


清单 5. AccountDao.java

                    
package com.test;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class AccountDao extends JdbcDaoSupport implements AccountData{
@SuppressWarnings("unchecked")
public List<Account> getAccounts()
{
  JdbcTemplate daoTemplate = this.getJdbcTemplate();
  RowMapper mapper = new RowMapper (){
    public Object mapRow(ResultSet rs,int rowNum) throws SQLException {
      Account act = new Account();
      act.setActno(rs.getShort("ACTNO"));
      act.setActkwd(rs.getString("ACTKWD"));
      act.setActdesc(rs.getString("ACTDESC"));
      return act;
    }
  };
  return daoTemplate.query(sql, mapper );
}
}

 

 

 

应用程序需要加载 Spring 配置文件,从而启动 Spring 框架、获取由该配置定义的 DAO,然后像前面一样调用 getAccounts() 在接口中声明的方法。清单 6 展示了这个应用程序。


清单 6. AccountApp.java

                    
package com.test;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AccountApp {
  public static void main(String[] args) {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(
  new  String[] {"applicationContext.xml"});		
    AccountData dao = (AccountData) ac.getBean("ACT_DAO");
    List<Account> actList = dao.getAccounts();
    for (Account act : actList )
      System.out.println(" ACTNO=" + act.getActno() + 
        " ACTKWD="+ act.getActkwd() + " ACTDESC="+act.getActdesc());
  }
}

 

Spring 使用配置文件初始化并启动框架。本教程使用一个简单的配置文件 “applicationContext.xml”(参见清单 7),从属性文件中获取数据源信息,以及定义这个应用程序所使用的 DAO 实现类。清单 7 是一个 Spring 配置文件示例。


清单 7. applicationContext.xml

                    

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" 
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
<!-- replaces ${...} placeholders with values from properties files -->
  <bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <list>
        <value>jdbc.properties</value>
      </list>
    </property>
  </bean>

  <!-- Define datasource -->
  <bean id="DB2DataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
    <property name="driverClassName"
      value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
  </bean>

<!-- Configure DAO -->
  <bean id="ACT_DAO" class="com.test.AccountDao">
    <property name="dataSource">
    <ref bean="DB2DataSource" />
    </property>
  </bean>
</beans> 

				

清单 8 是一个示例连接属性文件。


清单 8. jdbc.properties

                    
jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc:db2://localhost:50000/sample:traceFile=C:/sample.log;
  traceLevel=-1;traceFileAppend=true;
jdbc.username=USERNAME
jdbc.password=PASSWORD

 

如本教程开始时所述,除了数据访问之外,Spring 也支持其他特性,比如事务管理。将清单 9 中的代码添加到配置文件 applicationContext.xml,启用 Spring 的声明性事务管理。


清单 9. 事务管理器

                    
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="DB2DataSource"/>
</bean>

 

 本实例需要用到如下jar:

  • spring.jar
  • commons-logging.jar
  • commons-dbcp.jar
  • commons-pool.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值