一个事务中的所有sql都只能在同一个数据库连接中执行。
spring和mybatis配合时,事务的开启、提交、回滚由spring负责,而sql的执行由mybatis负责。两者是如何配合的呢?
- spring代理标注了@Transactional的方法。
- spring从DataSource中获取一个DB连接,并开启事务(通常是将连接的自动提交模式设置为false,以便可以显式控制事务的提交和回滚)。
- spring事务管理器将该连接通过ThreadLocal与当前线程绑定。
- 后续mybatis在事务中执行sql,通过spring事务管理器获取到的都是同一连接。
- 如果方法正常执行完成,则spring提交事务;如果发生异常,则spring回滚事务。
相关阅读:JDBC接口
网友评论