本帖最后由 feiling 于 2017-7-18 13:40 编辑
Spring_day021.1 事务 概述:一组业务操作ABCD,要么全部成功,要么全部不成功 特性:ACID 原子性:整体 一致性:数据的完整性 隔离性:并发 持久性:结果,假如事务提交了,数据就永久进入数据库了 隔离问题: 脏读:一个事务读到另一个事务没有提交的数据 不可重复读:一个事务读到另一个事务已提交的数据(update) 虚读(幻读):一个事务读到另一个事务已提交的数据(insert) 隔离级别: read uncommitted:读未提交。存在3个问题 read committed:读已提交。解决脏读,存在2个问题 repeatable read:可重复读。解决:脏读、不不可重复读。存在一个问题 serializable:串行化。都解决,单事务。 [Java] 纯文本查看 复制代码 ABCD一个事务
Connection conn = null;
try{
//1.获得连接
//2.开启事务
conn.setAutoCommit(false);
A
B
C
D
//3 提交事务
conn.commit();
}catche(){
//4 回滚事务
conn.rollback();
}
mysql事务操作--Savepoint [Java] 纯文本查看 复制代码 需求:AB(必须),CD(可选)
工资发,公司钱减少,员工钱增加。额外会发条短信。
短信不发,工资不发。。。
Connection conn = null;
try{
//1.获得连接
//2.开启事务
conn.setAutoCommit(false);
A
B
savepoint=conn.setSavepoint();
C
D
//3 提交事务
conn.commit();
}catche(){
//判断保存点是否有值
if(savepoint!=null){
//回滚到CD之前
conn.rollbak(savepoint);
//提交AB
conn.commit();
}else{
//回滚到AB之前
conn.rollback();
}
conn.rollback();
}
1.2 事务管理介绍transaciton -->tx 1.2.1 导入jar包spring-tx-3.2.0.RELEASE.jar1.2.2 三个顶级接口PlatformTransacitonManager平台事务管理器,spring要管理事务,必须使用事务管理器。
TransactionDefinition:事务详情(事务定义、事务属性),spring用于确定事务具体详情,例如:隔离级别、是否只读、超时时间等
TransactionStatus:事务状态,spring用于记录当前事务运行状态。例如:是否有保存点,事务是否完成。
1.2.3 PlatformTransactionManager 事务管理器l 导入jar包:需要时平台事务管理器的实现类 spring-jdbc-3.2.0.RELEASE.jar jdbc开发spring-orm-3.2.0.RELEASE.jar 整合hibernatespring-tx-3.2.0.RELEASE.jar l 常见的事务管理器 DataSourceTransactionManager ,jdbc开发时事务管理器,采用JdbcTemplate HibernateTransactionManager,hibernate开发时事务管理器,整合hibernate l api详解 TransactionStatusgetTransaction(TransactionDefinition definition) ,事务管理器通过“事务详情”,获得“事务状态”,从而管理事务。 void commit(TransactionStatus status) 根据状态提交 void rollback(TransactionStatus status) 根据状态回滚
|