DBFlute -- セッション前提知識「S2Dao」


テーマは「現場ソリューション DBFlute
https://event.seasarfoundation.org/sc2007autumn/Session#c5

DBFluteとは?」というような紹介セッションではありません。
現場の悩みをドリブンとしたDBFluteの高機能を紹介します。
概要も説明致しますが、あまりに前提知識が無いと
辛い場合もあるので軽く触れておきます。


そもそもS2Daoすら良く知らない方という人のために、
「セッションの前にS2Daoのこれだけは知っていおいて欲しい」
という機能を紹介します。


DBFlute視点のS2Daoの簡単な紹介】

Seasarが提供するO/Rマッパ(DBアクセスツール)。
DBFluteが着目している一番の機能は「2WAY-SQL」と呼ばれるものである。

ex) XxxDaoクラスのselectListXxx()の宣言

public List selectListXxx(Integer memberId, String memberName);


ex) 外だしのSQLファイルにおいて (XxxDao_selectListXxx.sql)

select member.MEMBER_ID, member....
from MEMBER member
/*BEGIN*/
where
/*IF memberId != null*/member.MEMBER_ID = /*memberId*/3/*END*/
/*IF memberName != null*/and member.MEMBER_NAME like /*memberName*/'Billy' || '%'/*END*/
/*END*/


IF文の分岐やバインド変数をSQLのコメントとして表現できて、
かつ、テスト値も同居させることができる。
これにより、開発者はアプリを動かさなくても簡単にSQLをコピーして
ツールで実行して文法エラーを検知することが可能。

例えば「member.MEMBER_ID = /*memberId*/3」において、
アプリではメソッドの引数のmemberIdをバインド変数として扱い、
テスト値「3」は無視する。
SQL*Plusのようなツールでは/*memberId*/はコメントとして無視され、
テスト値「3」が有効になる。

「/*BEGIN*/」によって、BEGIN内のIF文が全てFalseの場合は、「where」が消される。
「and」の制御も自動で行われ、「where and member...」というようになることは無い。


DBFluteでは、この機能をそのまま利用して「外だしSQL」と呼んでいる。