Spring中使用纯JDBC连接数据库的配置



Spring中使用纯JDBC连接数据库的配置。最近学习了如何配置在spring中使用单纯的jdbc连接数据库(不用hibernate等持久层框架),记录了一下几个关键的地方,备自己和有需之人查阅。
首先,在spring 的applicationContext配置文件中,需要配置数据源:

Xml代码  收藏代码
  1. <bean id=”propertyConfigurer”
  2.     class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
  3.     <property name=”locations”>
  4.         <list>
  5.             <value>classpath*:jdbc.properties</value>
  6.         </list>
  7.     </property>
  8. </bean>
  9. <!– dbcp pool config –>
  10. <bean id=”dataSource”
  11.     class=”org.apache.commons.dbcp.BasicDataSource”
  12.     destroy-method=”close”>
  13.     <property name=”maxIdle” value=”${jdbc.maxIdle}”></property>
  14.     <property name=”maxActive” value=”${jdbc.maxActive}”></property>
  15.     <property name=”maxWait” value=”${jdbc.maxWait}”></property>
  16.     <property name=”minIdle” value=”${jdbc.minIdle}”></property>
  17.     <property name=”driverClassName”
  18.         value=”${jdbc.driverClassName}”>
  19.     </property>
  20.     <property name=”url” value=”${jdbc.url}”></property>
  21.     <property name=”username” value=”${jdbc.username}”></property>
  22.     <property name=”password” value=”${jdbc.password}”></property>
  23. </bean>

我想上面的东西不用解释了吧,用的是dbcp的连接池。

然后,spring提供了一个JDBC的DaoSupport可供我们使用,就像集成hibernate时提供的hibernate的DaoSupport一样。这里叫JdbcDaoSupport。假设我们有个叫我们像如下的方式使用:

Java代码  收藏代码
  1. public class ImplBaseDao extends JdbcDaoSupport implements BaseDao {
  2.     public List get(String ID) {
  3.         return null;
  4.     }
  5. }

因为完全是一个Demo,所以BaseDao这个接口里面只有一个名为get的方法。

Java代码  收藏代码
  1. public interface BaseDao {
  2.     public List get(String ID);
  3. }

然后,具体的业务dao都可以继承自ImplBaseDao

Java代码  收藏代码
  1. public class PassengerInfoDao extends ImplBaseDao {
  2.     public List<PassengerInfo> list = new ArrayList<PassengerInfo>();
  3.     @SuppressWarnings(“unchecked”)
  4.     public List<PassengerInfo> getPassengerInfo(String id) {
  5.         String sql = ”select * from passengerinfo where id=”+id;
  6.         return (List<PassengerInfo>) this.getJdbcTemplate().query(sql,
  7.                 new PassengerInfoMapper());
  8.     }
  9. }

我惊叹spring的地方在于,对于

Java代码  收藏代码
  1. this.getJdbcTemplate().query(sql,new PassengerInfoMapper());

这句话中,第二个参数new PassengerInfoMapper()来自于spring提供一个接口的实现:

Java代码  收藏代码
  1. import java.sql.ResultSet;
  2. import java.sql.SQLException;
  3. import org.springframework.jdbc.core.RowMapper;
  4. import com.travelsky.web.pojo.PassengerInfo;
  5. public class PassengerInfoMapper implements RowMapper {
  6.     public Object mapRow(ResultSet rs, int index) throws SQLException {
  7.         PassengerInfo passengerInfo = new PassengerInfo();
  8.         passengerInfo.setId(rs.getInt(“id”));
  9.         passengerInfo.setPaName(rs.getString(“paName”));
  10.         return passengerInfo;
  11.     }
  12. }

可以看见,通过这样的方式,实现了bean与rs的一个转换,虽然很原始,但是这样做比我们完全靠自己去写还是要方便很多。
好了,说说spring集成jdbc的事务和配置和对dao的托管。
在applicationContext中

Xml代码  收藏代码
  1. <!– 事务管理 –>
  2. <bean id=”transactionManager”
  3.     class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
  4.     <property name=”dataSource”>
  5.         <ref bean=”dataSource” />
  6.     </property>
  7. </bean>
  8. <bean id=”transactionInterceptor”
  9.     class=”org.springframework.transaction.interceptor.TransactionInterceptor”>
  10.     <property name=”transactionManager” ref=”transactionManager” />
  11.     <property name=”transactionAttributes”>
  12.         <props>
  13.             <!– 定义规则 –>
  14.             <prop key=”*”>PROPAGATION_REQUIRED,-Exception</prop>
  15.             <prop key=”get*”>PROPAGATION_REQUIRED,readOnly</prop>
  16.         </props>
  17.     </property>
  18. </bean>
  19. <bean id=”transactionProxyCreator”
  20.     class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
  21.     <property name=”beanNames”>
  22.         <value>*Service</value>
  23.     </property>
  24.     <property name=”interceptorNames”>
  25.         <list>
  26.             <value>transactionInterceptor</value>
  27.             <!–
  28.                 此处增加新的Interceptor
  29.             –>
  30.         </list>
  31.     </property>
  32. </bean>
  33. <bean
  34.     class=”org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor”>
  35.     <property name=”transactionInterceptor”
  36.         ref=”transactionInterceptor” />
  37. </bean>

以上是对事务的配置,大同小异,不明白的可以参照相关spring事务配置说明的文档。
接下来是对dao service action等我们常见类型bean的托管。
其实很简单了,不写大家都会。

Xml代码  收藏代码
  1. <!– project实例配置 start –>
  2. <bean id=”baseDao” class=”com.travelsky.web.core.dao.ImplBaseDao”>
  3.     <property name=”dataSource”>
  4.         <ref bean=”dataSource” />
  5.     </property>
  6. </bean>
  7. <bean id=”JdbcTemplate” class=”org.springframework.jdbc.core.JdbcTemplate”>
  8. <property name=”dataSource”>
  9. <ref bean=”dataSource”/>
  10. </property>
  11. </bean>
  12. <!– 将所有的dao按顺序配置在这个地方 –>
  13. <bean id=”passengerInfoDao”
  14.     class=”com.travelsky.web.dao.PassengerInfoDao”>
  15.     <property name=”dataSource”>
  16.     <ref bean=”dataSource”/>
  17.     </property>
  18.     <!– 给其直接配置dataSource或者配置jdbcTemplate都可以实现与数据源的引用–>
  19.                  <!–
  20.     <property name=”jdbcTemplate”>
  21.     <ref bean=”JdbcTemplate”/>
  22.     </property>
  23.      –>
  24. </bean>
  25. <!– 将所有的service按顺序配置在这个地方 –>
  26. <bean id=”passengerInfoService”
  27.     class=”com.travelsky.web.service.PassengerInfoService”>
  28.     <property name=”passengerInfoDao”>
  29.         <ref bean=”passengerInfoDao” />
  30.     </property>
  31. </bean>
  32. <!– 将所有的action配置在这个地方 –>
  33. <bean name=”/painfo”
  34.     class=”com.travelsky.web.web.PassengerInfoAction”>
  35.     <property name=”passengerInfoService”>
  36.         <ref bean=”passengerInfoService” />
  37.     </property>
  38. </bean>
  39. <!– project实例配置 end –>

好了,写到这里,该结束了。

http://javeye.iteye.com/blog/235324