iBATIS3 から、トランザクションの方法は2通りある。
SqlSession の commit() , rollback() を以下のように使うか、
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("Configuration.xml"));
SqlSession sqlsession = factory.openSession();
try{
sqlsession.insert(...);
// do Exec
sqlsession.commit();
}catch(Exception e){
sqlsession.rollback();
}finally{
sqlsession.close();
}
org.apache.ibatis.transaction.Transaction を使うか、
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Transaction tx = transactionFactory.newTransaction(sqlsession.getConnection(),false);
try{
sqlsession.insert(...);
// do Exec
tx.commit();
}catch(Exception e){
try{ tx.rollback();}catch(Exception e){}
}finally{
try{ tx.close(); }catch(Exception e){
}
iBATIS2 SqlMapClient#startBatch を使用するようにバッチ処理としてSQL実行したい場合は、
iBATIS3 white paper に書いてあったが、最新のマニュアルPDFにはそのように書かれていない。
white paper では、
Transaction tx = factory.startBatch();
とあったが、そんなもの無いみたいだ。
最新のマニュアルPDFを読むと、SqlSession を作成する時に、バッチ処理としてSQL実行
するかどうか指定するみたいだ。
SqlSessionFactory の SqlSession 生成メソッド
SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(ExecutorType execType)
SqlSession openSession(ExecutorType execType, boolean autoCommit)
SqlSession openSession(ExecutorType execType, Connection connection)
Configuration getConfiguration();
ExecutorType に、BATCH , REUSE , SIMPLE とある。
SqlSession sqlsession = factory.openSession(ExecutorType.BATCH,false);
これで、目的のバッチSQL実行を記述できるようである。