前面学习Mybatis中Executor执行sql时,只研究了非事务执行时,直接DataSource.getConnection()创建连接。这里学习一下事务执行。
前提:SpringAOP——事务实现中学习到:Spring开启事务时会创建一个“事务连接”(需要手动提交的连接)然后通过ThreadLocal的方式,存储到当前线程中。
起因是面试官问了一个问题:spring中的事务连接和mybatis中的事务连接是否是同一个?
回答说:是同一个,但是说不出具体实现来(ThreadLocal)。
也就是说“事务连接”是Spring中创建的,Mybatis执行sql时,会从线程中取出“事务连接”,然后创建statement执行。结合mybatis——Executor用源码求证一下