Home > Java > iBATISでトランザクションする

iBATISでトランザクションする

iBATISのデフォルト設定だと自動コミットモードになっていて、細かなトランザクション処理ができません。なので、iBATISでトランザクションをできるようにしてみる。
設定・構成等はiBATIS入門と同じです。

自動コミットモードの解除

まずSqlMapConfig.xmlを編集して、自動コミットモードを解除しておきます。
大事なのは、「<property name=”JDBC.DefaultAutoCommit” value=”false” />」です。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
        "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
    <!-- DB接続設定 -->
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="org.postgresql.Driver" />
            <property name="JDBC.ConnectionURL" value="jdbc:postgresql://localhost:5432/sampledb" />
            <property name="JDBC.Username" value="postgres" />
            <property name="JDBC.Password" value="postgres" />
            <property name="JDBC.DefaultAutoCommit" value="false" />
        </dataSource>
    </transactionManager>

    <!-- sqlMapファイルの参照 -->
    <sqlMap resource="ibatis/dao/user.SqlMap.xml" />
</sqlMapConfig>

実際に動かしてみる

sqlMap.startTransaction()でトランザクションを開始して、sqlMap.commitTransaction()でコミットする。
正常・異常終了に関わらずfinallyでsqlMap.endTransaction()をする。
トランザクション処理を行う場合はこのパターンが定型だと思われる。

package ibatis;

import ibatis.dto.User;
import com.ibatis.sqlmap.client.SqlMapClient;
import java.sql.SQLException;

public class Sample {

    public static void main(String[] args) {
        // SqlMapClientを生成
        SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();

        try {
            // トランザクションを開始する
            sqlMap.startTransaction();

            // insert
            User user = new User();
            user.setId(4);
            user.setName("Tanaka");
            user.setAge(35);
            sqlMap.insert("insertUser", user);

            // delete
            sqlMap.delete("deleteUser", 1);

            // コミットする
            sqlMap.commitTransaction();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                // トランザクションを終了する
                // commitTransaction()まで行かず、エラーが発生した場合はロールバックを行う
                sqlMap.endTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://sinsengumi.net/blog/2009/03/ibatis%e3%81%a7%e3%83%88%e3%83%a9%e3%83%b3%e3%82%b6%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%99%e3%82%8b/trackback/
Listed below are links to weblogs that reference
iBATISでトランザクションする from sinsengumi血風録

Home > Java > iBATISでトランザクションする

Search
Feeds
Meta

Return to page top