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

本文详细介绍了如何在Spring框架中配置并使用JDBC进行数据库操作,包括数据源配置、DAO层设计、事务管理及Bean托管等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习了如何配置在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}"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxActive"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.maxActive}”></property>  
  14.     <property name=“maxWait” value={jdbc.maxWait}"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minIdle"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.minIdle}”></property>  
  15.   
  16.     <property name=“driverClassName”  
  17.         value={jdbc.driverClassName}"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"url"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.url}”></property>  
  18.   
  19.     <property name=“username” value={jdbc.username}"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"password"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.password}”></property>  
  20. </bean>  
 <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath*:jdbc.properties</value>
            </list>
        </property>
    </bean>
    <!-- dbcp pool config -->
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="maxIdle" value="${jdbc.maxIdle}"></property>
        <property name="maxActive" value="${jdbc.maxActive}"></property>
        <property name="maxWait" value="${jdbc.maxWait}"></property>
        <property name="minIdle" value="${jdbc.minIdle}"></property>

        <property name="driverClassName"
            value="${jdbc.driverClassName}">
        </property>
        <property name="url" value="${jdbc.url}"></property>

        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

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

然后,spring提供了一个JDBC的DaoSupport可供我们使用,就像集成hibernate时提供的hibernate的DaoSupport一样。这里叫JdbcDaoSupport。假设我们有个叫我们像如下的方式使用:
Java代码  收藏代码
  1. public class ImplBaseDao extends JdbcDaoSupport implements BaseDao {  
  2.   
  3.     public List get(String ID) {  
  4.         return null;  
  5.     }  
  6.   
  7. }  
public class ImplBaseDao extends JdbcDaoSupport implements BaseDao {

    public List get(String ID) {
        return null;
    }

}

因为完全是一个Demo,所以BaseDao这个接口里面只有一个名为get的方法。
Java代码  收藏代码
  1. public interface BaseDao {  
  2.     public List get(String ID);  
  3. }  
public interface BaseDao {
    public List get(String ID);
}

然后,具体的业务dao都可以继承自ImplBaseDao
Java代码  收藏代码
  1. public class PassengerInfoDao extends ImplBaseDao {  
  2.   
  3.     public List<PassengerInfo> list = new ArrayList<PassengerInfo>();  
  4.   
  5.     @SuppressWarnings(“unchecked”)  
  6.     public List<PassengerInfo> getPassengerInfo(String id) {  
  7.         String sql = ”select * from passengerinfo where id=”+id;  
  8.         return (List<PassengerInfo>) this.getJdbcTemplate().query(sql,  
  9.                 new PassengerInfoMapper());  
  10.   
  11.     }  
  12. }  
public class PassengerInfoDao extends ImplBaseDao {

    public List<PassengerInfo> list = new ArrayList<PassengerInfo>();

    @SuppressWarnings("unchecked")
    public List<PassengerInfo> getPassengerInfo(String id) {
        String sql = "select * from passengerinfo where id="+id;
        return (List<PassengerInfo>) this.getJdbcTemplate().query(sql,
                new PassengerInfoMapper());

    }
}

我惊叹spring的地方在于,对于
Java代码  收藏代码
  1. this.getJdbcTemplate().query(sql,new PassengerInfoMapper());  
this.getJdbcTemplate().query(sql,new PassengerInfoMapper());
这句话中,第二个参数new PassengerInfoMapper()来自于spring提供一个接口的实现:
Java代码  收藏代码
  1. import java.sql.ResultSet;  
  2. import java.sql.SQLException;  
  3.   
  4. import org.springframework.jdbc.core.RowMapper;  
  5.   
  6. import com.travelsky.web.pojo.PassengerInfo;  
  7.   
  8. public class PassengerInfoMapper implements RowMapper {  
  9.   
  10.     public Object mapRow(ResultSet rs, int index) throws SQLException {  
  11.         PassengerInfo passengerInfo = new PassengerInfo();  
  12.         passengerInfo.setId(rs.getInt(”id”));  
  13.         passengerInfo.setPaName(rs.getString(”paName”));  
  14.         return passengerInfo;  
  15.     }  
  16.   
  17. }  
import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.travelsky.web.pojo.PassengerInfo;

public class PassengerInfoMapper implements RowMapper {

    public Object mapRow(ResultSet rs, int index) throws SQLException {
        PassengerInfo passengerInfo = new PassengerInfo();
        passengerInfo.setId(rs.getInt("id"));
        passengerInfo.setPaName(rs.getString("paName"));
        return passengerInfo;
    }

}

可以看见,通过这样的方式,实现了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.   
  9. <bean id=“transactionInterceptor”  
  10.     class=“org.springframework.transaction.interceptor.TransactionInterceptor”>  
  11.     <property name=“transactionManager” ref=“transactionManager” />  
  12.     <property name=“transactionAttributes”>  
  13.         <props>  
  14.             <!– 定义规则 –>  
  15.             <prop key=“*”>PROPAGATION_REQUIRED,-Exception</prop>  
  16.             <prop key=“get*”>PROPAGATION_REQUIRED,readOnly</prop>  
  17.         </props>  
  18.     </property>  
  19. </bean>  
  20.   
  21. <bean id=“transactionProxyCreator”  
  22.     class=“org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>  
  23.     <property name=“beanNames”>  
  24.         <value>*Service</value>  
  25.     </property>  
  26.     <property name=“interceptorNames”>  
  27.         <list>  
  28.             <value>transactionInterceptor</value>  
  29.             <!–       
  30.                 此处增加新的Interceptor      
  31.             –>  
  32.         </list>  
  33.     </property>  
  34. </bean>  
  35.   
  36. <bean  
  37.     class=“org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor”>  
  38.     <property name=“transactionInterceptor”  
  39.         ref=“transactionInterceptor” />  
  40. </bean>  
  <!-- 事务管理 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>

    <bean id="transactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <!-- 定义规则 -->
                <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionProxyCreator"
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <value>*Service</value>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
                <!--      
                    此处增加新的Interceptor     
                -->
            </list>
        </property>
    </bean>

    <bean
        class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
        <property name="transactionInterceptor"
            ref="transactionInterceptor" />
    </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.   
  33. <!– 将所有的action配置在这个地方 –>  
  34. <bean name=“/painfo”  
  35.     class=“com.travelsky.web.web.PassengerInfoAction”>  
  36.     <property name=“passengerInfoService”>  
  37.         <ref bean=“passengerInfoService” />  
  38.     </property>  
  39. </bean>  
  40. <!– project实例配置 end –>  
   <!-- project实例配置 start -->
    <bean id="baseDao" class="com.travelsky.web.core.dao.ImplBaseDao">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>
    <bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
    <ref bean="dataSource"/>
    </property>
    </bean>
    <!-- 将所有的dao按顺序配置在这个地方 -->
    <bean id="passengerInfoDao"
        class="com.travelsky.web.dao.PassengerInfoDao">
        <property name="dataSource">
        <ref bean="dataSource"/>
        </property>
        <!-- 给其直接配置dataSource或者配置jdbcTemplate都可以实现与数据源的引用-->
                  <!--
        <property name="jdbcTemplate">
        <ref bean="JdbcTemplate"/>
        </property>
         -->
    </bean>
    <!-- 将所有的service按顺序配置在这个地方 -->
    <bean id="passengerInfoService"
        class="com.travelsky.web.service.PassengerInfoService">
        <property name="passengerInfoDao">
            <ref bean="passengerInfoDao" />
        </property>
    </bean>

    <!-- 将所有的action配置在这个地方 -->
    <bean name="/painfo"
        class="com.travelsky.web.web.PassengerInfoAction">
        <property name="passengerInfoService">
            <ref bean="passengerInfoService" />
        </property>
    </bean>
    <!-- project实例配置 end -->

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

book

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值