DBアクセスを定番化しよう DBFlute入門

第2回 DBFluteではじめてのDBアクセス

この記事を読むのに必要な時間:およそ 6 分

DBFluteにてスキーマ情報を取得

データベース上のテーブルの準備が整いましたので,スキーマ情報を取得するためにJDBCタスクを実行してみましょう。⁠dbflute_exampledb」配下の「jdbc.bat」をOSコマンド上で実行します(UNIX上では「jdbc.sh⁠⁠。

実行して成功すると,⁠dbflute_exampledb/schema」配下に「project-schema-exampledb.xml」が作成されます。データベースのスキーマ情報がこのXMLに出力されます。こちらの実行ログも「dbflute_exampledb/log/dbflute.log」にて確認できます。

図9 JDBCタスクで生成したスキーマXMLファイル

図9 JDBCタスクで生成したスキーマXMLファイル

DBFluteにてクラスを自動生成

スキーマ情報が取得できたので,DBFluteのクラスを自動生成するためにGenerateタスクを実行してみましょう。

「dbflute_exampledb」配下の「generate.bat」をOSコマンド上で実行します(UNIX上では「generate.sh⁠⁠。Eclipseにて該当プロジェクトを更新(F5)して生成されたクラスをEclipseに認識させます。⁠src/main/java」配下にクラスファイルが出力されいるのがわかります図10⁠。こちらの実行ログも「dbflute_exampledb/log/dbflute.log」にて確認できます。

図10 GenerateタスクでされたDBFluteのパッケージ構造

図10 GenerateタスクでされたDBFluteのパッケージ構造

DBFluteのdiconファイルをインクルード

DBFluteを利用する場合は,DBFluteによって自動生成されたdbflute.diconを利用します。

Doltengで生成したsrc/main/resources配下にあるapp.diconは,dao.diconをインクルードしていますが,これをdbflute.diconに修正しますリスト2⁠。

リスト2:app.diconにてdbflute.diconをインクルード

<include path="dao.dicon"/>
      
<include path="dbflute.dicon"/>

実行時の接続データベースの設定

今回は,H2データベースを組込みとして利用します。先ほど,EMechaの画面にて,DB接続URLを「jdbc:h2:file:../src/main/resources/exampledb/exampledb」というように指定しました。同様に,jdbc.diconにて同じ場所を示す指定をします。

Doltengで作成した直後のjdbc.diconのDB接続情報は以下のようになっていますリスト3⁠。

リスト3:Doltengで作成直後のjdbc.diconのDB接続情報

<!-- for H2 -->
<component name="xaDataSource"
  class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  <property name="driverClassName">
    "org.h2.Driver"
  </property>
  <property name="URL">
    "jdbc:h2:tcp://localhost:9092/demo"
  </property>
  <property name="user">"sa"</property>
  <property name="password">""</property>
  <destroyMethod>
    @org.seasar.framework.util.DriverManagerUtil@deregisterAllDrivers()
  </destroyMethod>
</component>

ここの「URL」プロパティの値を以下のように変更しますリスト4⁠。

リスト4:今回のサンプルで利用するH2への接続するためのURL

<property name="URL">
  "jdbc:h2:file:"
  + @org.seasar.framework.util.ResourceUtil@getBuildDir(@org.seasar.dbflute.example.gihyojp.dbflute.allcommon.Entity@class).getCanonicalPath()
  + "/exampledb/exampledb"
</property>

実行時のロギング設定

実行時のログの出力を調整します。⁠src/main/resources」「log4j.properties」を開いて,以下の一行を追加しますリスト5⁠。

リスト5:log4j.propertiesのログ対象調整

log4j.category.org.seasar=DEBUG
log4j.category.org.seasar.extension.dbcp=INFO

こちらは,必須事項ではありませんが,⁠Dolteng」で作成されたデフォルト設定のままだと,実行時に「コネクションの取得・閉じる」のログが大量に発生してしまい,非常にログの可読性が落ちてしまいます。

そこで,ピンポイントでそのログだけを抑制するようにします。但し,コネクション周りでのトラブルが発生したときは非常に有用なログになりますので,そのときは追加した一行を削除して下さい。

また,今回はアプリケーションのパッケージも「org.seasar」配下のため「たまたま」設定する必要が無いのですが,通常のアプリケーションのパッケージを指定する場合は,そのアプリケーションのパッケージを指定する必要があります。

以下はアプリケーションのパッケージが「jp.gihyo」だった場合の例ですリスト6⁠。

リスト6:log4j.propertiesのアプリログ出力設定

log4j.category.org.seasar=DEBUG
log4j.category.org.seasar.extension.dbcp=INFO
log4j.category.jp.gihyo=DEBUG

著者プロフィール

久保雅彦(くぼまさひこ)

DBFluteメインコミッタ。主にオープン系の開発に従事。DB設計・DB周りの実装などを担当することが多い。