MySQL数据库之事务
MySQL事务主要用于处理操作量大的一系列操作;比如在人员管理系统中,删除一个人员的同时还要删除人员的基本资料,也要删除一些其他相关的信息,这样的数据库操作就叫事务.
MySQL事务处理的两种方式
- 用BEGIN(开始一个事务),ROLLBACK(事务回滚),COMMIT(事务确认)实现
- 用SET来改变MySQL的自动提交模式
实现事务管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @Test public void test1() { Connection conn = null; PreparedStatement ps = null; try { conn = DBUtils.getConnection(); conn.setAutoCommit(false); ps = conn.prepareStatement("update account set money=money-100 where name='A'"); ps.executeUpdate(); int i = 10/0; ps = conn.prepareStatement("update account set money=money+100 where name='B'"); ps.executeUpdate(); conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { DBUtils.close(conn, ps, null); } }
|
Mybatis中的事务管理
Mybatis的事务在环境配置中, 环境配置传入SqlSessionFactory工厂
1 2 3 4
| <environment> <transactionManager type="jdbc"/> </environment>
|
开启事务后,Mybatis会创建一个TransactionFactory 事务工厂
Mybatis中Transaction(事务)是由TransactionFactory(事务工厂)创建的
事务由Connection实例管理
Spring+Mybatis实现事务管理
使用Managed事务管理,Mybatis对事务的创建提交回滚没有实现,是交给容器来实现的
1 2 3 4 5 6 7 8 9 10 11 12 13
| <environment> <transactionManager type="managed"/> </environment>
```html
<tx:annotation-driven /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
|
1 2
| @EnableTransactionManagement
|
抽离出事务Service,使用@Transational注解事务方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Service public class TransationalService {
@Autowired Service service
@Transactional(rollbackFor = Exception.class) public void transationMethod() { service.select(); service.update(); service.delete(); } }
|
Anything can go right will go right