Spring的事务管理之编程式事务管理(手动编写代码完成事务管理.)

需要事务管理器:真正管理事务对象.

* Spring提供了事务管理的模板(工具类.)

第一步:注册事务管理器:。

第二步:注册事务模板类:。

第三步:在业务层注入模板类:(模板类管理事务)。

第四步:在业务层代码上使用模板。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 配置C3P0连接池 加入jar:com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/info" /><!-- 
			这里用的是jdbcUrl -->
		<property name="user" value="root" />
		<property name="password" value="mysql123" />
	</bean>
	<!-- 业务类 -->
	<bean id="accountService" class="cn.my.demo1.DaoImpl.AccountServiceImpl">
		<!-- 在业务层注入Dao -->
		<property name="accountDao" ref="accountDao" />
		<!-- 在业务层注入事务管理的模板 -->
		<property name="transactionTemplate" ref="transactionTemplate"></property>

	</bean>
	<!-- 持久层类 -->
	<bean id="accountDao" class="cn.my.demo1.DaoImpl.AccountDaoImpl">

		<!-- 注入连接池对象,通过连接池对象创建模板 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 事务管理的模板 -->
	<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
	<property name="transactionManager" ref="transactionManager"/>
	
	</bean>
	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<!-- 需要注入连接池,通过连接池获得连接 -->
	<property name="dataSource" ref="dataSource"/>
	</bean>
</beans>

处理转账的业务:

package cn.my.demo1.DaoImpl;

import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

import cn.my.demo1.Dao.AccountDao;
import cn.my.demo1.Dao.AccountService;

public class AccountServiceImpl implements AccountService {
	private AccountDao accountDao;//注入持久层
	private TransactionTemplate transactionTemplate;//注入事务管理模板
	public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
		this.transactionTemplate = transactionTemplate;
	}
	public void setAccountDao(AccountDao accountDao) {
		this.accountDao = accountDao;
	}
	/**
	 * 转账的方法
	 */
	@Override
	public void transfer(final String from, final String to, final Double money) {
		// TODO Auto-generated method stub
		//参数是TransactionCallback<Object> arg0,一个接口;然后通过它的实现类TransactionCallbackWithoutResult
		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
			
			@Override
			protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
				// TODO Auto-generated method stub
				accountDao.out(from, money);
				//如果出现异常数据会回滚,
			//	int d=5/0;
				accountDao.in(to, money);
			}
		});
		
	}

}

注意:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值