一、DAO层
package com.yf.dao;
public interface UserDao {
public void updateMoney(int id, int money);
}
package com.yf.dao;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
public class UserDaoImpl extends JdbcDaoSupport implements UserDao{
/**
* 增加用户money
*/
@Override
public void updateMoney(int id, int money) {
String sql = "update user set money=money+? where id=?";
getJdbcTemplate().update(sql, money, id);
}
}
二、Service层
package com.yf.service;
public interface UserService {
public void updateUserMoney(int id, int money);
}
package com.yf.service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
import com.yf.dao.UserDao;
import com.yf.dao.UserDaoImpl;
public class UserServiceImpl implements UserService {
private TransactionTemplate transactionTemplate;
private UserDaoImpl userdao;
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
public void setUserdao(UserDaoImpl userdao) {
this.userdao = userdao;
}
@Override
public void updateUserMoney(int id, int money) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus arg0) {
// 使用事务
userdao.updateMoney(1, 100);
int i = 10 / 0;
userdao.updateMoney(2, 200);
System.out.println("----事务执行成功----");
}
});
// 不使用事务
// userdao.updateMoney(1, 100);
// int i = 10 / 0;
// userdao.updateMoney(2, 200);
// System.out.println("----事务执行成功----");
}
}
三、bean.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
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-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 配置数据源 -->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3305/dershop?serverTimezone=GMT%2B8"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- JdbcTemplate -->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置userDao -->
<bean name="userDao" class="com.yf.dao.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务管理 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
<!-- 配置UserService -->
<bean name="userService" class="com.yf.service.UserServiceImpl">
<property name="userdao" ref="userDao"></property>
<property name="transactionTemplate" ref="transactionTemplate"></property>
</bean>
<!-- 配置事务传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--
name 方法 例如:update* 匹配所有updateXXX()方法
propagation 事务传播属性
isolation 配置隔离级别
read-only 是否只读
-->
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/>
</tx:attributes>
</tx:advice>
</beans>