naobe @ ウィキ

iBATIS

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可
OpenSourceに戻る

iBATIS概要/特徴

  • ORマッパ(Object,RDB)
  • RDBのSQLを使う
  • JavaBeanとテーブルの同期はない
  • JDBC, JTA使用
  • 常にPreparedStatementを適用
  • キャッシュで高速化可能。JPAと異なり、insert, update , deleteはSQLを使う(個人的にはこちらのほうが判り易くて良い)。

検証環境

iBATIS2.3.4  最新のSpringがサポートするiBATISのバージョン

SQLマップ設定ファイル

目的



名前

SqlMapConfig.xml

配置


名前空間

SqlMapConfig.xmlの<settings>タブで、useStatementNamespaces属性をtrueに設定すると、sqlMapClientの引数idに名前空間を設定しなければならない。
名前空間はSQLマップXMLファイルに以下の様に設定する。

 <sqlMap namespace="BookTitleDto">

<settings>要素





プロパティファイル

目的

SQLマップ設定ファイルの値にプレースホルダとして設定。【記述】${プロパティ名}。

名前、配置

SQLマップ設定ファイル中の<properties>タグのresource属性に記述。クラスパスからの相対ディレクトリを指定。

SQLマップXMLファイル

大なり、小なりの記号をSQL内に記述するときは、以下の方法で回避できる。

 WHERE AGE <![CDATA[ > ]]> #value#

記述例

Spring - SQLマップXMLファイル 参照

部品化

<sql>タグ、<include>タグを使って、重複するSQLを部品化できる。

【記述例】
 <sql id="selectItem_fragment">
   FROM items
   WHERE parentid = 6
 </sql>
 <select id="selectItemCount" resultClass="int">
   SELECT COUNT(*) AS total
   <include refid="selectItem_fragment"/>
 </select>
 <select id="selectItems" resultClass="Item">
   SELECT id, name
   <include refid="selectItem_fragment"/>
 </select>
 

複雑なJavaBeanの対応

テーブルが別のテーブルの外部キーを持つとき、Objectへの変換は、属性がJavaBeanであるJavaBeanに変換することになる。この場合以下のように記述して対応する。

【記述例】
 <resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
   <result property=”id” column=”PRD_ID”/>
   <result property=”description” column=”PRD_DESCRIPTION”/>
   <result property=”category” resultMap=“get-category-result” />
 </resultMap>
 <resultMap id=”get-category-result” class=”com.ibatis.example.Category”>
   <result property=”id” column=”CAT_ID” />
   <result property=”description” column=”CAT_DESCRIPTION” />
 </resultMap>
 <select id=”getProduct” parameterClass=”int” resultMap=”get-product-result”>
   select *
   from PRODUCT, CATEGORY
   where PRD_CAT_ID=CAT_ID
   and PRD_ID = #value#
 </select>

PRODUCT, CATEGORYのJOINをとって、全てのカラムをselectした後で、categoryに関しては、別のresultMapからJavaBeanを作成している。

SqlMapClient API

iBATISをJavaアプリケーションから使うためのAPI。

APIの取得

以下を使う。

 private Reader reader = new Resources.getResourceAsReader(
   "com/ibatis/example/sqlMap-config.xml");
 private SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMap(reader);

トランザクション

  • SqlMapClient.startTransaction (), SqlMapClient.commitTransaction() SqlMapClient.endTransaction()を使う
  • デフォルトは自動コミット、自動ロールバック
  • 1トランザクション/1スレッド

バッチ

insert, updateを連続して実行するときにDBサーバに対してステートメントをまとめて発行する。

 try {
   sqlMap.startTransaction();
   sqlMap.startBatch();
   // … execute statements in between
   int rowsUpdated = sqlMap.executeBatch(); //optional
   sqlMap.commitTransaction();
 } finally {
   sqlMap.endTransaction();
 }

ロギング

以下のログを使う。最初から順番に最初に見つかったものを使う。
  • Jakarta Commons Logging
  • Log4j
  • JDK Logging

課題


課題 対応 備考
SQLで複数のステートメントを送ることが可能なドライバの特性
人気記事ランキング
ウィキ募集バナー