Spring基于xml文件方式实现事务管理

transaction-manager.xml

<?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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
 		
 		
 		<!-- 配置c3p0连接池 -->
 		<!-- 方法一 -->
 		<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
			<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
			<property name="jdbcUrl" 
			value="jdbc:mysql://localhost:3306/lihai?useUnicode=true&characterEncoding=utf-8&useSSL=false"></property>
			<property name="user" value="root"></property>
 			<property name="password" value="111111"></property>
 		</bean> -->
 		<!-- 方法二 -->
 		<context:property-placeholder location="classpath:jdbc.properties"/>
 		<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 			<property name="driverClass" value="${driverClass}"></property>
 			<property name="jdbcUrl" value="${jdbcUrl}"></property>
 			<property name="user" value="${user}"></property>
 			<property name="password" value="${password}"></property>
 		</bean>
 		
 		<!-- 第一步,创建事务管理器 -->
 		<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 			<!-- 注入datasource -->
 			<property name="dataSource" ref="dataSource"></property>
 		</bean>
 		<!-- 第二步,配置事务增强   指定要使用哪个事务管理器-->
 		<tx:advice id="txadvice" transaction-manager="transactionManager">
 			<!-- 事务操作 -->
 			<tx:attributes>
 				<!-- 设置进行事务操作的方法匹配规则  对怎样的方法进行事务匹配-->
 				<tx:method name="account*"/>
 			</tx:attributes>
 		</tx:advice>
 		
 		<!-- 第三步 配置切面 -->
 		<aop:config>
 			<!-- 切入点 -->
 			<aop:pointcut expression="execution(* com.spring.transactionManager.OrderService.*(..))" id="pointcut1"/>
 			<!-- 切面 -->
 			<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/><!-- 增强用在切入点txadvice->pointcut1 -->
 		</aop:config>
 		
 		<!-- 逐次传递
 		
 		Service->dao->jdbcTemplate->dataSource 
 		
 		-->
 		<bean id="orderService" class="com.spring.transactionManager.OrderService">
 			<property name="orderDao" ref="orderDao"></property>
 		</bean>
 		<bean id="orderDao" class="com.spring.transactionManager.OrderDao">
 			<property name="jdbcTemplate" ref="jdbcTemplate"></property>
 		</bean>
 		
 		<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
 			<!-- 把dataSource传递到jdbcTemplate -->
 			<property name="dataSource" ref="dataSource"></property>
 		</bean>
 		
</beans>

OrderDao.java

/**
 * 
 */
package com.spring.transactionManager;

import org.springframework.jdbc.core.JdbcTemplate;

/**
 * @author lihai 
 * @createdtime 2018-5-15 下午10:47:47
 * @类描述
 */
public class OrderDao {
	private JdbcTemplate jdbcTemplate;
	/**
	 * @param jdbcTemplate the jdbcTemplate to set
	 */
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	
	public void lessMoney(){
		String sql="update account set salary=salary-? where name=?";
		jdbcTemplate.update(sql, 500,"小王");
	}
	public void moreMoney(){
		String sql="update account set salary=salary+? where name=?";
		jdbcTemplate.update(sql, 500,"小杰");
	}
}

OrderService.java

/**
 * 
 */
package com.spring.transactionManager;

/**
 * @author lihai 
 * @createdtime 2018-5-15 下午10:48:21
 * @类描述
 */
public class OrderService {
	private OrderDao orderDao;
	/**
	 * @param orderDao the orderDao to set
	 */
	public void setOrderDao(OrderDao orderDao) {
		this.orderDao = orderDao;
	}
	
	public void accountMoney(){
		orderDao.lessMoney();
		
		//int i=10/0;
		int i=10/0;
		
		orderDao.moreMoney();
	}
	
}

TestTransactionManager.java

/**
 * 
 */
package com.spring.transactionManager;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author lihai 
 * @createdtime 2018-5-15 下午11:02:21
 * @类描述
 */
public class TestTransactionManager {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("transaction-manager.xml");
		OrderService orderService = (OrderService) context.getBean("orderService");
		orderService.accountMoney();
	}

}
在OrderDao.java中注意sql语句的书写和update中的参数顺序。

猜你喜欢

转载自blog.csdn.net/lihai755/article/details/80330870