2008年12月06日

iBATISについて@

ちょっと前にiBATISの記録でもつけようかと思ってたけど、
そのままだったのを思い出したので、記録。

とは、言ってもiBATISはそんなに難しくない。

たぶん、数あるO/Rマッパーの中でも、学習コストの低い部類だと思う。

その上、ボトルネックとなりやすいSQL部分(DB設計にもよるが)が直接記述できるので、SQLが慣れてる人には適してると思う。

今回は、そのiBATISの設定ファイルの記録にする。
(まあ、詳しくは本家のドキュメントを見れば一目瞭然だが。)

以下、実際に行った設定ファイルの内容。
ちなみにバージョンは、2.3.4。

<?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">

<!--
  iBatisの設定ファイル。
-->
<sqlMapConfig>

  <!--
    sqlMapの振る舞い
    項目名         : 設定内容           (デフォルト値)
    maxTransaction     : 同時に管理出来るトランザクション数 (32)
    maxRequest       : 同時に発行出来るSQL文の上限  (512)
    maxSession       : 同時に接続出来るクライアント数   (128)
    cacheModelEnabled   : Objectのキャッシュを行うか     (true)
    lazyLodingEnabled   : 遅延結合を行うか        (true)
    enhancementEnabled   : 実行時にEntityのバイトコードをCGLIBを使って
                 lazyLoading向けに最適化するか    (false)
    useSatatementNamespaces : カラム名に完全修飾名を指定する必要があるか(false)
    statementCachingEnabled : PreparedStatementのキャッシュ.(true)
    classInfoCacheEnabled : キャッシュされたクラスの維持。(true)
  -->
  <settings
    maxTransactions="32"
    maxRequests="512"
    maxSessions="128"
    cacheModelsEnabled="true"
    lazyLoadingEnabled="true"
    enhancementEnabled="true"
    useStatementNamespaces="false"
    statementCachingEnabled="true"
    classInfoCacheEnabled="true"
  />

  <!--
    コネクションの設定を行う。
    transactionManagerを指定し、その中にdataSourceを定義する。
    dataSourceタイプは、事前にiBatisにいくつかのエイリアスが定義
    されている。SIMPLEはその中の一つで、SimpleDataSourceを表す。
    他には、DBCPやJNDIが存在し、それぞれ指定するパラメータが異なる。
  -->
  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <!-- JDBC接続 -->
      <property name="JDBC.Driver"         value="com.mysql.jdbc.Driver"/>
      <property name="JDBC.ConnectionURL"      value="jdbc:mysql://192.168.2.X:3306/hoge_db"/>
      <property name="JDBC.Username"         value="userid"/>
      <property name="JDBC.Password"         value="userpass"/>
      <property name="JDBC.DefaultAutoCommit"    value="false"/>
      <!-- コネクションプーリング -->
      <property name="Pool.MaximumActiveConnections" value="32"/>
      <property name="Pool.MaximumIdleConnections" value="5"/>
      <property name="Pool.MaximumCheckoutTime" value="20000"/>
      <property name="Pool.TimeToWait" value="2000"/>
      <!-- プールされたコネクションの生存確認
       生成されてから ${olderThan}ms 経過
       or 使われなくなってから ${notUsedFor}ms 経過 したコネクションは
       使う前に ${pingQuery} を発行して生きているかを確認する
      -->
      <property name="Pool.PingQuery" value="select 1"/>
      <property name="Pool.PingEnabled" value="true"/>
      <!-- <property name="Pool.PingConnectionsOlderThan" value="1200000"/> 20分 -->
      <property name="Pool.PingConnectionsNotUsedFor" value="900000"/> <!-- 15分 -->
      <!-- プリペアードステートメント -->
      <property name="Driver.cachePrepStmts" value="true"/>
      <property name="Driver.prepStmtCacheSize" value="20"/>
    </dataSource>
  </transactionManager>

  <!--
    自分で定義したSQL設定ファイルを定義する。

    パスは、URL形式とresource形式があり、resource形式は、
    クラスパスを指定する。
  -->
  <sqlMap resource="../sqlmap-file1.xml"/>
  <sqlMap resource="../sqlmap-file2.xml"/>
  <sqlMap resource="../sqlmap-file3.xml"/>

</sqlMapConfig>

また、外部ファイルから設定値を読み込むこともできる。

例えば、以下のような感じです。

<sqlMapConfig>

  <!--
    外部のプロパティファイルを読み込み、
    ファイル内で${キー名}でアクセスできるようにする

    【注意】指定できるプロパティファイルは一つだけとなっている.
  -->
  <properties resource="jp/hoge/resource/database.properties"/>

・・・一部省略・・・

  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <!-- JDBC接続 -->
      <property name="JDBC.Driver"         value="${driver}"/>
      <property name="JDBC.ConnectionURL"      value="${url}"/>
      <property name="JDBC.Username"         value="${username}"/>
      <property name="JDBC.Password"         value="${password}"/>

・・・省略・・・

</sqlMapConfig>


とりえあえず、こんな感じでうまくいっている。

今回は、以上。
posted by hana at 01:25| Comment(0) | TrackBack(0) | DB,SQL関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。