ssm事务管理(Spring jdbc)
SSM框架中使用注解的形式进行事务管理。
事务的4个特性:
简单来说,所谓的事务,是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
配置文件(applicationContext.xml)
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 引用数据库连接池 -->
<property name="dataSource" ref="ds"/>
</bean>
<!-- 配置事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
测试@Transactional注解管理事务
模拟转账异常自动回滚事务
@Service
@Transactional //加了改注解,表示改类下的所有方法,都启用事务管理
public class BankServiceImpl implements IBankService {
@Resource
private BankMapper bankMapper;
@Override
public void transferAmount() {
//张三减去1000
Map<String,Object> map = new HashMap<String,Object>();
map.put("accountName", "张三");
map.put("money", -1000);
//更新张三的金额
bankMapper.doUpdate(map);
//认为制造异常
System.out.println(1/0);
//李四加上1000
map.put("accountName", "李四");
map.put("money", 1000);
bankMapper.doUpdate(map);
}
}
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
propagation | Propagation枚举 | REQUIRED | 事务传播属性 (下有说明) |
isolation | isolation枚举 | DEFAULT | 事务隔离级别 (另有说明) |
readOnly | boolean | false | 是否只读 |
timeout | int | -1 | 超时(秒) |
rollbackFor | Class[] {} | 需要回滚的异常类 | |
rollbackForClassName | String[] {} | 需要回滚的异常类名 | |
noRollbackFor | Class[] {} | 不需要回滚的异常类 | |
noRollbackForClassName | String[] {} | 不需要回滚的异常类名 |
————————————————
部分引用↑ 原文链接:https://blog.csdn.net/zhen_6137/article/details/82024819