SQLファイルの作り方

Domaは、検索系のSQLについては自動生成しないというポリシーを持っています(更新系SQLについては自動生成と手動生成どちらもサポートしています)。理由は以前書いたとおりです。というわけで、SQLは検索系のDaoメソッドごとにSQLファイルに記述する必要があります。SQLファイルつくるの面倒くさいと思うかもしれませんが、Doma-Gen(http://doma.seasar.org/extension/doma_gen.html)とDoma Tools(http://doma.seasar.org/extension/doma_tools.html)を使えば苦になりません。


今日は、SQLSQLを格納するファイルを作成する手順を紹介したいと思います。以下、Doma-GenとDoma Toolsの設定が済んでいるものとして説明します。設定方法については、それぞれのリンク先を参照してください。


まず、一番最初にDoma-Genを使ってDBから以下のものを生成しておきます(DBの定義が変わらなければ最初の一度だけ、定義が変わったらそのたびごとに再生成します)。

  • エンティティやDaoなどのJavaコード(.javaファイル)
  • 識別子を条件として検索するSQLを含んだSQLファイル(.sqlファイル)

ここで注目したいのはSQLファイルです。例えば、ADRESSテーブルがあるとすると、次のようなSQLが生成されます。

select
    ADDRESS_ID,
    STREET,
    VERSION
from
    ADDRESS
where
    ADDRESS_ID = /* addressId */1

テーブルのすべてのカラムが展開されているので、これをベースにすればいいわけです(要するにコピペ元)。


いま、ADDRESS_IDカラムではなくSTREETカラムを条件にした新しい問い合わせが必要だとします。この場合、次の手順でSQLSQLを格納するファイルを作成します。

  1. まず、Daoインタフェースにメソッドを定義します。
  2. 次に、Doma Toolsの機能を使って、メソッドに対応するSQLファイル(中身は空)を自動生成します。具体的には、メソッドにカーソルを合わせて右クリックして「Jump to SQL File」を実行します。
  3. そして、SQLSQLのツール(Oracle SQL Developer、SQL Server Management Studioなど)を使って作成します。その際、Doma-Genで生成されたSQLをベースとします。
  4. 最後に、作成したSQLSQLファイルにコピペします。保存すれば、Doma ToolsからaptがキックされSQLが検証されます。


最近のSQLのツールは、テーブル名やカラム名の保管をしてくれるので、SQLを編集しやすいです。ツールで実行すればすぐにSQLが正しいか確認できますし、DomaSQLファイルはそのまま実行できる形式をとっているので、ツールを使わない手はないです。
ひとつ注意点ですが、SQLファイルを外部のツールに関連付けて直接開いて編集するのは避けてください。その場合、SQLファイルの変更をDoma Toolsが検知できないからです。SQLEclipse上のエディタで編集するようにしてください(EclipseSQL用のプラグインを使う分には大丈夫だと思います)。


ここで紹介したのはお奨めの手順です。自動生成系のツールが嫌いな場合や規模が小さい場合は、Doma-Genを使わないという選択肢もありです。でも、Doma Toolsはぜひ使ってください。これを使わないとSQLファイルを保存したときにaptが起動しないので、コンパイル時チェックが弱くなってしまいます。Doma ToolsはSQLファイルとDaoの間の相互遷移もサポートしているので便利だと感じてもらえると思います。