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

第1回 DBFluteの概要

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

DBFluteの概要(2) 主な機能

では,DBFluteの主な機能を見ていきましょう。

自動生成機能

DBFluteのメイン機能は自動生成です。図2を見てください。

既にデータベース上にテーブルスキーマが出来上がっていることを前提とし,自動生成管理者が「JDBCタスク」を実行します。すると,DBFluteはJDBC経由でDBに接続し,スキーマ情報を取得しその情報をXMLファイルに出力します。このXMLを「スキーマファイル」と呼び,自動生成の中間ファイルとなります。

その後,自動生成管理者が「Generateタスク」を実行します。すると,DBFluteは先ほど作成したスキーマファイルを読み込み,その情報をもとに「DBFluteのS2Dao拡張」⁠Dao」⁠Entity」⁠Behavior」⁠ConditionBean」などのクラスを自動生成します。

図2 DBFlute簡易概念図

図2 DBFlute簡易概念図

自動生成されるクラスは,ジェネレーションギャップパターンを採用して自動生成されます。

通常,自動生成されたクラスにアプリケーション独自の拡張を加えたいものです。

ジェネレーションギャップパターンを採用していない自動生成の場合は,変更・追加した処理が再自動生成時に上書きされてしまいます。実質,独自の拡張はできないと考えてよいでしょう。

そこで,自動生成されるクラスをスーパークラスとサブクラスにわざと分けて生成し,再自動生成時にはスーパークラスのみを上書きするやり方を取ることで,サブクラスにアプリケーション独自の拡張を加えられるようになります。

DBFluteは「ジェネレーションギャップパターンによる自動生成」を提供します。

そのため,仕様変更でデータベースに変更が入る場合も,⁠データベースを変更⁠⁠→⁠再自動生成」と作業することで,アプリケーション独自の拡張を残したまま自動生成クラスに変更を反映することが可能です。

自動生成する主なクラスをカテゴリごとに分けた表がリスト2となります。主なクラスは全てジェネレーションギャップとして生成していることが示されています。

リスト2 生成クラスカテゴリ一覧

クラスカテゴリ概要ジェネレーション
ギャップ
利用頻度※1
BehaviorDaoとEntityの定番処理を行うObject。
DaoS2DaoのDaoインターフェース。
Entityテーブルに対応するドメインエンティティ。
ConditionBeanSQL組み立てObject。

※1) プログラマが直接利用することが多いものは○,全く利用しないものは×,その間は△

DAOとEntityに関しては,S2Daoの自動生成ツールとして特に違和感はないでしょう。

しかし,BehaviorとConditionBeanが「おや?」と思われる方がいらっしゃるかと思います。また,DAOの利用頻度が△で,代わりにBehaviorが○であることに気付かれるかと思います。

そうです。ここがまさしくDBFluteが提供する「拡張」と言える部分なのです。

拡張機能(Behavior)

Behaviorとは,⁠DaoとEntityの定番処理を行うObject」と言えます。

論よりモデル,図3を見てください。検索処理を行う例のフローが表現されています。

図3 検索フロー

図3 検索フロー

画面プロセスであるPageクラスから後述するConditionBeanを使ってSQLを組み立て,Behaviorに渡して検索をしています。

また,図4を見てください。更新処理を行う例のフローが表現されています。

図4 更新フロー

図4 更新フロー

PageクラスからEntityに更新値を設定して,Behaviorに渡して更新をしています。

このようにDBFluteではBehaviorを利用してDBアクセスをします。

著者プロフィール

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

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