天天看點

Mybatis 事務管理

mybatis的事務和資料源有着非常密切的聯系。上文講述了mybatis的資料源,本文要講述的便是mybatis的事物

1.事務的分類

我們還是已一段xml配置檔案為例

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
  </environment>
</environments>      

xml的transactionManager就是mybatis事務的類型。mybatis事務總共有兩種類型。

1.JDBC:使用JDBC來管理實務
2.MANAGED:使用WEB容器來管理事務      

 2.事務的建立

 事物的建立和Datasource和相似,在系統解析xml的時候生成一個工廠類,當需要生成一個sqlssesion的時候通過工廠類生成一個transaction對象,這個對象被executor對象持有。

生成事務工廠類

Mybatis 事務管理

 生成事務

Mybatis 事務管理

 3.事務的送出

 我們以一次sqlssesion.commit()為起點。來看下commit的内部究竟發生了什麼(這裡我們已JDBCTransaction為例)

1.調用executor的commit

Mybatis 事務管理

2.調用transaction的commit

Mybatis 事務管理

3.1JDBCTransaction調用connection的commit

Mybatis 事務管理

 3.1ManagedTransaction調用connection的commit

Mybatis 事務管理

由此可見JDBCTransaction其實隻是對Connection做了包裝。而ManagedTransaction什麼都沒做。

以上就是mybatis的事務介紹。