mybatis的事务管理机制

时间:2022-10-18 01:10:27

myabatis的事务顶层接口:

Transaction接口。该接口有两个子实现类,对应着Mybatis的事务管理的两种形式:

jdbcTransaction:直接使用JDBC提交和回滚功能,依赖于从数据源获取到的连接(java.sql.Connection对象)来管理事务;

ManagedTransaction:这种机制Mybatis自身不会去实现事务管理,而是让程序的容器如(HBOSS,Weblogic)来实现对事务的管理;

我们在配置数据源信息的时候,在environment标签下有一个type属性,是决定我们用什么类型的事务管理机制的。在XML解析的时候,也就是在XMLConfigBuilder类的parseConfiguration方法里调用了environmentElement方法解析environment标签内配置的信息,包括事务管理机制和数据源的解析。

解析完成之后,接下来看看事务是在哪里创建的?答:事务其实是在获取sqlSession的会话中创建的,具体是在openSessionFromDataSource(参数等)里。从Congifuation中拿到环境信息,在拿到事务工厂,再创建事务对象,再创建执行器,然后创建DefaultsqlSession对象返回。注意:这几一个创建都是依赖于上一步获取的值,作为参数传给下一个的。

在这里,我们看下事务工厂TransactionFactory接口,他有两个子实现:

jdbcTransaction:直接使用JDBC提交和回滚功能,依赖于从数据源获取到的连接(java.sql.Connection对象)来管理事务;

ManagedTransaction:这种机制Mybatis自身不会去实现事务管理,而是让程序的容器如(HBOSS,Weblogic)来实现对事务的管理;

上面说过。所以,通过TransactionFactory很容易获取到Transaction对象实例。

以这个为例:我们来看看jdbcTransactionFactory是怎样生成jdbcTransaction的?

答:jdbcTransaction只是相对于java.sql.Connection事务处理进行了一次包装,其实,还是利用Connection的commit(),rocback(),close()来实现对事务的管理。