InScope
概要
基本概念
対象値の列挙する条件 in ('a', 'b') を設定します。InScope は、絞り込み条件を表す ConditionKey です。もし、MEMBER_ID in (2, 3, 12) であれば、会員IDが 2 と 3 と 12 の会員を検索します。
会話上では、いんすこーぷ と表現します。
会話上間違いのないように命名
InScopeは完全にDBFlute用語です。"in" もしくは "in句"、"inの条件" などと呼ぶのが通常でしょう。ただ、あまりにも一般用語で、かつ、短いため、会話で聞き返されることが多いです。 DBFluteでは、会話でのコミュニケーションの円滑さも踏まえて、ユニークな名前として InScope という名前を付けました。列挙した値の "範囲(Scope)" の中(In)、という捉え方をしています。
実装方法
実装の流れ
query() の後、set[column-name]_InScope() を呼び出し、条件値を指定します。条件値は、Collection 型のリストとなります。(つまり、List 型や Set 型もOK)
e.g. InScope条件の実装手順 (Eclipseでコード補完) {MEMBER_ID} @Java
List<Integer> memberIdList = new ArrayList<Integer>();
memberIdList.add(2);
memberIdList.add(3);
memberIdList.add(12);
MemberCB cb = new MemberCB();
cb.q // .q と打って enter
--
cb.query()
--
// 1. .set まで打つとカラム選択
// 2. MI (MemberId) でカラム確定
// 3. IS (InScope) で enter
cb.query().setMIIS
--
cb.query().setMemberId_InScope(memberIdList);
// where MEMBER_ID in (2, 3, 12)
メソッド仕様
基本仕様
以下項目、全て Equal と同じ仕様となります。
- nullや空文字の指定
- 大文字小文字の区別
- char型でサイズ不足の値
同カラムに対する複数条件の指定
追加条件となります。(指定した分だけ条件になる)
同カラムに対する同じ条件値での複数指定
追加条件となります。(指定した分だけ条件になる)
指定されたリストは読み取るだけ
指定されたリストに対して、一時的にでも内部処理で要素を追加したりするようなことはありません。 よって、読み取り専用のリストを指定しても問題ありません。
e.g. InScope条件で読み取り専用のリストを指定 {MEMBER_ID} @Java
MemberCB cb = new MemberCB();
cb.query().setMemberId_InScope(Arrays.asList(3, 6, 7));
サポートされる型
- String
- Number 全般 (IntegerやLongなど)
- Date 全般 (DateやTimestampなど)
Date 型に関しては、日付の対象値の列挙という条件が業務的に必要になることが少ないと考えられ、includeQueryMap.dfprop のセットアップデフォルトでメソッドの生成が抑制されています。
区分値メソッドの利用
区分値カラムの場合は、区分値メソッド(CDef を直接渡すメソッド)が存在します。
否定条件:NotInScope
否定条件の対象値の列挙として、NotInScope もあります。条件が否定になっただけで仕様は InScope と全く同じです。