Query(Relation)
概要
基本概念
関連テーブルに対する Query です。指定された関連テーブルの絞り込み条件などを付与することができます(結合処理は内部的に解決されます)。
会話上では、くえりぃりれーしょん と表現します。Query という名前自体には、関連テーブルへの絞り込み条件も含まれますが、"関連テーブルに対して" ということを強調したい場合に明示的な表現として利用されます。
取得と絞り込みは別の機能
ConditionBean はDBアクセスの基本概念を(できるだけ)そのまま投影したインターフェースとなっています。 "データ取得" と "絞り込み" というのは別の概念です。よって、"関連テーブルのデータを取得すること" と "関連テーブルの条件で絞り込みをすること" は、業務的には同時に求められることが多いですが、これら二つの概念は ConditionBean の機能として別の機能となります。
SetupSelect は、"関連テーブルのデータ取得"、Query(Relation) は、"関連テーブルの条件で絞り込み" (もしくは並び替え) といった形に分けられます。例えば、関連テーブルのデータは必要ないけど、その関連テーブルのカラムで絞り込みや並び替えをするような場合、Query(Relation) と一緒に SetupSelect する必要はありません。 逆に、データを取得する必要がないのに、絞り込みや並び替えで使うからといって無意味に無意識に取得されてしまうことがないようにしています。
実装方法
実装の流れ
query() の後、query[relation-table]() を呼び出します。その後に続けて、関連テーブルに関する条件設定メソッドを呼び出すことができます。(基本的な)絞り込み条件であれば .set[column-name]...、並び替え条件であれば .addOrderBy... を呼び出します。(他にも色々な機能が利用できます)
e.g. Query(Relation)の実装手順 (Eclipseでコード補完) {MEMBER_STATUS} @Java
MemberCB cb = new MemberCB();
cb.q // ".q" とだけ打って enter
--
cb.query().q // ".q" とだけ打ってメソッド(関連テーブル)を選んで enter
--
cb.query().queryMemberStatus()... // 続けて、条件設定を
e.g. Query(Relation)を利用したときのSQL {MEMBER_STATUS} @DisplaySql
select dfloc.MEMBER_ID, dfloc.MEMBER_NAME, ...
from MEMBER dfloc
left outer join MEMBER_STATUS dfrel_0 on ...
where dfrel_0.MEMBER_STATUS_NAME ...
メソッド仕様
基本的に Query と同じです。
"同じメソッドの複数回の呼び出し" に関しては、SetupSelect と同じです。
サポートされる関連テーブル
SetupSelect と同じです。
SetupSelect で同じ関連テーブル
Query(Relation) で、SetupSelect で指定した同じ関連テーブルを利用した場合でも、SQL上は一つの結合で表現されます。
結合方式は...外部結合"的"!?
SetupSelect(Relation) とセオリーは同じです。