天天看點

Mybatis源碼解析:事務管理

Mybatis源碼解析:事務管理

Mybatis事務管理

我們可以在mybatis-config.xml中配置事務管理器的實作

<transactionManager type="JDBC"/>      

當值為JDBC時,事務管理實作類為JdbcTransaction,底層利用資料庫的Connection來管理事務

當值為MANAGED時,事務管理實作類為ManagedTransactionFactory,但它對事務的管理是一個空實作,将事務管理交給外部容器

Mybatis源碼解析:事務管理

JdbcTransaction

Mybatis源碼解析:事務管理

ManagedTransaction

Mybatis源碼解析:事務管理

和Spring整合後的事務管理

mybatis和spring整合建立TransactionFactory的時候,如果沒有設定,則會将其設定為SpringManagedTransactionFactory

org.mybatis.spring.SqlSessionFactoryBean#buildSqlSessionFactory

Mybatis源碼解析:事務管理
Mybatis源碼解析:事務管理

但是真正執行事務的時候,一般情況下不會由SpringManagedTransaction來執行,因為我們一般都把事務交給spring來管理,當把事務交給spring管理的時候this.isCnotallow=true,是以commit和rollback相當于是空實作

Mybatis源碼解析:事務管理

mybatis和spring整合後,一般還是由spring架構中的DataSourceTransactionManager來進行事務管理

Mybatis源碼解析:事務管理

參考部落格