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

最近学习了如何配置在spring中使用单纯的jdbc连接数据库(不用hibernate等持久层框架),记录了一下几个关键的地方,备自己和有需之人查阅。
首先,在spring 的applicationContext配置文件中,需要配置数据源:
	<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。假设我们有个叫我们像如下的方式使用:
public class ImplBaseDao extends JdbcDaoSupport implements BaseDao {

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

}

因为完全是一个Demo,所以BaseDao这个接口里面只有一个名为get的方法。
public interface BaseDao {
public List get(String ID);
}

然后,具体的业务dao都可以继承自ImplBaseDao
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的地方在于,对于
this.getJdbcTemplate().query(sql,new PassengerInfoMapper());
这句话中,第二个参数new PassengerInfoMapper()来自于spring提供一个接口的实现:
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中
	<!-- 事务管理 -->
<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的托管。
其实很简单了,不写大家都会。

<!-- 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 -->

好了,写到这里,该结束了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值