User.java pojo类:
package com.liu.jdbc.annotation;
public class User {
private Integer id;
private String username;
private String password;
private Integer money;
public Integer getMoney() {
return money;
}
public void setMoney(Integer money) {
this.money = money;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + ", money=" + money + "]";
}
}
UserDao.java接口:
package com.liu.jdbc.annotation;
import java.util.List;
public interface UserDao {
//模拟转账
public void transfer(String outUser,String inUser,double money);
}
UserDaoImpl.java实现类:
package com.liu.jdbc.annotation;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
public class UserDaoImpl implements UserDao {
//声明JdbcTemplate属性及其setter方法
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/*
* 模拟转账
* outUser:收款人
* inUser:汇款人
* money:汇款金额
*/
@Override
@Transactional(isolation = Isolation.DEFAULT,propagation = Propagation.REQUIRED,readOnly = false)
public void transfer(String outUser, String inUser, double money) {
// TODO Auto-generated method stub
this.jdbcTemplate.update("update user set money = money + ? where username = ?", money,inUser);
//模拟异常
// int i = 1/0;
this.jdbcTemplate.update("update user set money = money - ? where username = ?", money,outUser);
}
}
ApplicationContext.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
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-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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 配置数据源 -->
<bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 数据库驱动 -->
<property name="driverClassName" value = "com.mysql.jdbc.Driver"></property>
<!-- 数据库url -->
<property name="url" value = "jdbc:mysql://localhost:3306/spring"></property>
<!-- 数据库用户名 -->
<property name="username" value = "root"></property>
<!-- 数据库密码 -->
<property name="password" value = "root"></property>
</bean>
<!-- 配置jdbc模板类 -->
<bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate">
<!-- 默认必须使用数据源 -->
<property name="dataSource" ref = "dataSource"></property>
</bean>
<!-- 定义ID为userDdao的bean -->
<bean id = "userDao" class = "com.liu.jdbc.annotation.UserDaoImpl">
<property name="jdbcTemplate" ref ="jdbcTemplate"></property>
</bean>
<!-- 配置事务管理器,依赖于数据源 -->
<bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref = "dataSource"></property>
</bean>
<!-- 注册事务管理器驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
Test.java测试类:
package com.liu.jdbc.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//xml方式声明事务
public class Test {
public static void main(String[] args) {
String xmlpath = "com/liu/jdbc/annotation/ApplicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);
//获取UserDao实例
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
//调用转账方法
userDao.transfer("tom", "jack", 200);
//提示
System.out.println("转账成功");
}
}