一、使用编程方式
数据源、事务的底层配置
[html]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="driverUrl" value="jdbc:mysql://localhost:3306/test" />
<property name="user" value="username" />
<property name="password" value="userpwd" />
</bean>
<!-- jdbc事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<!--事务模板 -->
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager">
<ref local="transactionManager" />
</property> www.zzzyk.com
<!--ISOLATION_DEFAULT 表示由使用的数据库决定 -->
<property name="isolationLevelName" value="ISOLATION_DEFAULT"/>
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
<!-- <property name="timeout" value="30"/> -->
</bean>
</beans>
DAO层的配置
[html]
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="merchantMapDAO" class="cn.com.nantian.epayment.dao.MerchantMapDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="payOrderDAO" class="cn.com.nantian.epayment.dao.PayOrderDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
SERVICE层的配置
[html]
<bean id="elecChnlFrontPayService"
class="cn.com.nantian.epayment.pay.service.ElecChnlFrontPayServiceImpl">
<property name="merchantMapDAO" ref="merchantMapDAO" />
<property name="payOrderDAO" ref="payOrderDAO" />
<property name="transactionTemplate" ref="transactionTemplate" />
</bean>
程序示例代码
[java]
private PayOrderDAO payOrderDAO;
protected TransactionTemplate transactionTemplate;
/**
* 保存支付订单
*/
protected PayOrder savePayReq(final PayOrder payOrder) {
PayOrder order = (PayOrder) this.transactionTemplate.execute(new TransactionCallback() {
@Override
public Object doInTransaction(TransactionStatus status) {
// 查看是否已经存在支付订单,如果已经存在则返回订单主键
PayOrder payOrderTemp = payOrderDAO.findOrder(String.valueOf(payOrder.getPayOrderId()));
// 由支付渠道类型(PayChannelType)转换得到交易类型(PayType)
if (payOrder.getPayChannelId().equalsIgnoreCase(PAY_CHNL_ACT_BAL)) {// 账户余额支付
payOrder.setPayType("3");
} else if (payOrder.getPayChannelId().equalsIgnoreCase(PAY_CHNL_FAST_PAY)) {// 联通快捷支付
payOrder.setPayType("4");
} else {// 网银网关支付
payOrder.setPayType("2");
}
// 比对新的支付金额与原订单金额是否一致,如不一致则提示错误
if (payOrderTemp == null) {