MyBatis-pring-トランスファイナーガ

10128 ワード

事務
MyBatis-pringを使用する主な理由は、MyBatisがSpringの事務管理に参加できるようにすることです.MyBatisに新しい特定のトランザクションマネージャを作成する代わりに、MyBatis-priningはSpringに存在するDataSourceTransation Managerを利用しています.
SpringのPlatform Transation Managerが配置されれば、Springで通常のやり方で事務を配置することができます.TransactコメントとAOP(Asppect-Oriented Program)スタイルの配置はすべてサポートされています.トランザクション処理中に、個別のSql Sessionオブジェクトが作成され、使用されます.事務が完了すると、このセッションは適切な方法で提出またはロールバックします.
いったん事務が作成されると、MyBatis-priningは透明な管理事務を行います.あなたのDAO類には追加のコードは必要ありません.
標準設定
Springのトランザクション処理を開始するには、SpringのXMLプロファイルから簡単にDataSourceTransation Managerオブジェクトを作成します.
 id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   name="dataSource" ref="dataSource" />
指定されたDataSourceは普通あなたがSpringを使っている任意のJDBC DataSourceです.これは接続池とJNDI検索で得られたDataSourceを含んでいる.
注意してください.事務マネージャに指定されたDataSourceはSql Session FactoryBenを作成するのと同じデータソースでなければ、事務マネージャは動作しません.
容器管理サービス
JEE容器を使用しており、かつSpringを容器管理事務(Continer manage transactions、CMT、訳者注)に参加させたい場合、SpringはJtaTransation Managerまたはその容器に指定されたサブクラスを使用して配置されるべきです.この仕事をする一番便利な方法はSpringの事務の名前空間です.
 />
このような構成では、MyBatisはCMTによって構成される他のSpringトランザクションリソースと同じである.Springは任意の存在の容器事務を自動的に使用し、上にSql Sessionを付加します.ビジネスを開始していない場合や、ビジネス設定に基づいて、Springは新しい容器管理事務を開始します.
注意してください.Springの事務管理ではなくCMTを使いたいなら、Sql Session FactoryBenを基本的なMyBatisのManagedTransactoryを使用して、他の任意のSpring事務管理器ではなく、Sql Session Factoryを配置しなければなりません.
 id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   name="dataSource" ref="dataSource" />
   name="transactionFactory">
     class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
    
プログラミング式事務管理
MyBatisのSql Sessionはプログラミングされたトランザクションを処理するために指定された方法を提供します.ただし、MyBatis-pringを使用すると、beanはSpring管理のSql Sessionまたはマッピングを用いて注入される.つまりSpringは通常事務を処理するものです.
Spring管理のSql SessionでSql Session.com miit()を呼び出すことはできません.Sql Session.rollback()またはSql Session.close()方法.このようにすれば、ユニスティックモードExceptionの異常が出ます.注意注入されたマッパーを使用する場合はそれらの方法にアクセスできません.
JDBC接続が自動提出に設定されていても、Sql Sessionデータ方法の実行やSpringトランザクション以外の任意の呼び出しマッピング方法は自動的に提出されます.
プログラミング的に事務をコントロールしたいなら、Springマニュアルの10.6節を参照してください.このコードは、10.6.2章で説明したPlatformTransation Managerを手動で使用して、トランザクションを処理する方法を示しています.
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatus status = txManager.getTransaction(def);
try {
  userMapper.insertUser(user);
}
catch (MyException ex) {
  txManager.rollback(status);
  throw ex;
}
txManager.commit(status);
このコードはマッパーを示していますが、Sql Sessionと一緒に使用することもできます.