iBatisについて整理

JavaのO/Rマッパーを軽く調べてみた - oknknicの日記」で軽く触れたきりだったので、そろそろ整理しておく。

設定ファイル

  • SqlMapConfig: iBATIS全体の設定。読み込み対象のSqlMapを複数指定可能
  • SqlMap: SQLの記述。1つのファイルに複数のSQLを記述可能

オブジェクト

  • SqlMapClient: SqlMapで定義したSQLにアクセスするためのクライアントとなる、スレッドセーフなオブジェクト。SqlMapConfigを1つ指定して生成する。

SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(Resources.getResourceAsReader("conf/SqlMapConfig.xml"));

名前空間

  • SqlMapのnamespace
  • sqlのid

セッション(≒コネクション)

セッションは、データベースに接続開始〜終了までの単位である。
SqlMapClientは、SqlMapSessionを取得するためのopenSessionメソッドを提供している。

try {
   SqlMapSession session = sqlMapClient.openSession()
   session.startTransaction()
   // ...
   session.commitTransaction();
} finally {
   try {
     session.endTransaction();
   } finally {
     session.close();
   }
}

トランザクション

トランザクションは、コミット・ロールバックのための単位で、1つのセッション内で複数(直列に)もつことができる。
並列で複数のトランザクションを走らせたい場合は、別セッションで。

SqlMapClientおよびSqlMapSessionはSqlMapTransactionManagerをスーパインターフェースとしてもつため、トランザクション制御も可能である。

try {
   sqlMapClient.startTransaction()
   // ...
   sqlMapClient.commitTransaction();
} finally {
   sqlMapClient.endTransaction();
}