spring框架从连接池获取一个数据库连接 connection, connection.setAutoCommit(false)
spring框架将connection放到ThreadLocal里面存储
mybatis执行这个业务方法里面的所有sql句,从ThreadLocal里面获取connection执行sql
PrepareStatement pstmt = connection.preparedStatement();
pstmt.executeUpdate();
理解:
先从thread的临时变量threadLocal中获取connection
然后利用aop前置通知开启事务
之后执行sql语句 这里实际上的statment执行sql语句
然后如果没有异常 就是aop的返回后通知 提交事务
如果有异常 就是aop 的异常通知 去回滚事务
spring如何获取我们的数据库连接对象 ?
spring事务底层是aop 实现的
一个connection对应一个事务 一个线程对应一个connection
连接池对象在spring容器中
thread获取一个连接对象去存入threadLocal中 当我们要获取的时候 底层就是通过thread去获取的
真实执行的是statment还是connetion?
实际执行的是sstatment connetion就是一个通道而已