conditionBeanMap
Java6版までは、includeQueryMap という名前でした。(古い名前でも動きます)
conditionBeanMapとは?
ConditionBeanに生成する検索のためのメソッド cb.query().set[column]_[condition-key](...) を取捨選択(生成するかしないか)するためのDBFluteプロパティ。
DBFluteクライアントの dfprop 配下の conditionBeanMap.dfprop (includeQueryMap.dfprop) という名前のテキストファイルです。主に Generateタスク にて参照されます。
例えば、"日付のNotEqual" など、ほとんど利用しない条件は出力するだけソース量の無駄使い(コンパイルスピードに影響)なので、 出力しないようにしたい場合などに利用してください。 もし、アプリケーション全体で文字列型カラムに対して大なり小なり(>、<)の条件を付与することが絶対にないのであれば、String型の "GreaterThan, LessThan, GreaterEqual, LessEqual" を全て空指定すると効果が高いでしょう。間違った条件の付与を抑制するという面でも効果があります。
このプロパティは TwoEdgedSword 扱いです。厳重注意のもと 利用して下さい。
プロパティ
map型プロパティ で、メソッドとそれに対するテーブルとカラムのマッピングを定義します。
conditionBeanMapの仕様 @conditionBeanMap.dfprop
map:{
; [property-type] = map:{
; [condition-key] = map:{ [table-name] = list:{[column-name] ; ...} }
; ...
}
String、Number、Date の 3 種類の型に対して、それぞれ生成するメソッドを指定することができます。 このプロパティに定義した内容は、次のルールで ConditionBean に反映されます。
- A. ConditionKey 自体が指定されていない
- 全てのテーブルのカラムにおいて、その ConditionKey のメソッドは生成される。 生成設定がされていない(デフォルトの挙動の)状態と言える。
- B. ConditionKey にテーブルとカラムが指定されている
- 該当カラムに対してのみ、その ConditionKey のメソッドが生成される。
- C. ConditionKey に何のテーブルも指定されていない
- 全てのカラムにおいて、その ConditionKey のメソッドは生成されない。
- D. 除外指定の ConditionKey にテーブルとカラムが指定されている
- "A" の場合でも該当カラムのその ConditionKey のメソッドは生成されない。ただし、"B" や "C" のように生成設定が明示的に指定されている場合は、該当カラムのおいてはこの除外指定は影響しない。 ("D" は、"A, B, C" に対する追加事象)
以下、(*)の付いたプロパティは必須です。
property-type (*)
プロパティ型を指定します。
- 値候補
- String, Number, Date, OrderBy(@since 1.0.5B), Relation(@since 1.0.5G), Myself(@since 1.0.5B)
- デフォルト
- なし
- 補足
-
- String, Number, Dateと、データ型ごとに指定できる
- OrderByは、データ型ごとではなくひとまとまりである
- OrderByは、ConditionKeyとして Asc, Desc が指定できる
- Relationは、ExistsReferrer, InScopeRelation などが指定できる
- Relationは、カラムの指定が意味をなさないのでカラム指定はしない
- Myselfは、InlineView(@since 1.0.5G), ScalarCondition などが指定できる
- Myselfは、カラムの指定が意味をなさないのでカラム指定はしない
condition-key (*)
生成対象の ConditionKey を指定します。
それぞれ先頭に "!" を付けると除外指定となります。また、"%" を付けると除外指定された中からの復活指定となります(@since 1.0.5B)。
- 値候補
- NotEqual, GreaterThan, LessThan, GreaterEqual, LessEqual, InScope, NotInScope, PrefixSearch, LikeSearch, NotLikeSearch, EmptyString, FromTo, DateFromTo(@since 0.9.7.5), RangeOf(@since 0.9.9.2C), IsNull(@since 1.0.5G), IsNullOrEmpty(@since 1.0.5G), IsNotNull(@since 1.0.5G)
- Asc, Desc ※OrderByで利用可能 (@since 1.0.5B)
- ScalarCondition, MyselfDerived, MyselfExists, MyselfInScope ※Myselfで利用可能 (@since 1.0.5B)
- デフォルト
- なし
- 補足
-
- Equalは指定不可 (必ず生成される)
- PrefixSearch, LikeSearch, NotLikeSearch, EmptyString は文字列型専用
- FromTo, DateFromTo は日付型専用
- RangeOf は数値型専用
- EmptyStringは、別プロパティにて空文字条件が有効になっていることが前提。Equal、NotEqual が対象となり、それらメソッドの定義とは独立した設定となる。 (例えば、NotEqual自体が無効になっていても、EmptyStringが有効であれば、EmptyStringのNotEqualメソッドは生成される)
- Asc, Desc は OrderBy 専用
- ScalarCondition, MyselfDerived などは Myself 専用
依存関係のある演算子の指定は注意が必要です。例えば、FromTo の生成を完全に抑制した場合、DateFromTo のメソッドではコンパイルエラーが発生します(依存しているため)。LikeSearch と PrefixSearch も同様です。
table-name
対象とするテーブル名を指定します。
- 値候補
- (自動生成対象)テーブルの名前 or $$ALL$$
- デフォルト
- なし
-
- $$ALL$$ の場合は、対象カラムが存在する全てのテーブルに対して有効に
- prefix:, suffix:などを使って曖昧検索もできる e.g. suffix:_STATUS (@since 1.0.5B)
column-name
対象とするカラム名を指定します。
- 値候補
- カラムの名前 or $$CommonColumn$$ or $$VersionNo$$
- デフォルト
- なし
-
- $$CommonColumn$$ の場合は、共通カラム全てを指定したことになる
- $$VersionNo$$ の場合は、バージョン番号カラムを指定したことになる
- prefix:, suffix: などを使って曖昧検索もできる e.g. suffix:_ORDER (@since 1.0.5B)
- type: を使ってデータ型(JDBC型)による検索もできる e.g. type:CLOB (@since 1.0.5B)
- プロパティ型が Myself のときは空っぽでOK (指定するものがないため) (@since 1.0.5B)
type: を使ったJDBC型指定は、ConditionKeyでの除外指定と組み合わせて、例えば「テキスト型に対するInScopeやNotEqualを抑制する」のに使うとよいでしょう。
Example
e.g. 含める、除外する
e.g. 文字列型カラムの大なり小なり比較を生成しない設定例 @includeQueryMap.dfprop
map:{
; String = map:{
; GreaterThan = map:{}
; LessThan = map:{}
; GreaterEqual = map:{}
; LessEqual = map:{}
}
}
e.g. 特定のテーブルのカラムに対してのみ生成する設定例 @includeQueryMap.dfprop
map:{
; String = map:{
; GreaterThan = map:{ MEMBER = list:{ MEMBER_ACCOUNT } }
; LessThan = map:{
; PRODUCT = list:{ PRODUCT_NAME ; PRODUCT_HANDLE_CODE }
}
}
}
e.g. 文字列型の共通カラムの多くのメソッドを生成しない設定例 @includeQueryMap.dfprop
map:{
; String = map:{
; !NotEqual = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !GreaterThan = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !LessThan = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !GreaterEqual = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !LessEqual = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !InScope = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !NotInScope = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !PrefixSearch = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !LikeSearch = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
; !NotLikeSearch = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
}
}
e.g. VERSION_NO の多くのメソッドを生成しない設定例 @includeQueryMap.dfprop
map:{
; Number = map:{
; !GreaterThan = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
; !LessThan = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
; !GreaterEqual = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
; !LessEqual = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
; !InScope = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
; !NotInScope = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
}
}
e.g. カラムドリブンで指定 @since 1.0.5G
もし、商品テーブルの REGULAR_PRICE は等値以外では絶対に使わないぞっ、というか使ってもらっちゃ困る、というときがあったら... @since 1.0.5G
e.g. 商品テーブルの REGULAR_PRICE は等値以外では使わないぞというときの設定例 @includeQueryMap.dfprop
map:{
; $Product = map:{
; REGULAR_PRICE(Number) = list:{}
}
}
というか、REGULAR_PRICE は OrderBy でも使わないぞっ、というときがあったら...
e.g. さらに REGULAR_PRICE は OrderBy でも使わないぞというときの設定例 @includeQueryMap.dfprop
map:{
; $Product = map:{
; REGULAR_PRICE(Number) = list:{}
; REGULAR_PRICE(OrderBy) = list:{}
}
}
そしてさらに、PRODUCT_HANDLE_CODE では曖昧検索は使わないぞっ、というときがあったら...
e.g. さらに REGULAR_PRICE は OrderBy でも使わないぞというときの設定例 @includeQueryMap.dfprop
map:{
; $Product = map:{
; REGULAR_PRICE(Number) = list:{}
; REGULAR_PRICE(OrderBy) = list:{}
; PRODUCT_HANDLE_CODE(String) = list:{
; !PrefixSearch ; !LikeSearch ; !NotLikeSearch
}
}
}
e.g. テーブル区分値のスーパースリム化 @since 1.0.5G
例えば、全てのテーブル区分値のテーブル名が CLS_ で始まっていて、CLS_FOO だと以下のようなカラム構成になっているとして...
- FOO_CODE
- codeに相当。主キーなので、DBFlute内部で色々と使う可能性がある
- FOO_NAME
- nameに相当。絞り込み条件やソート条件で使うようなことはない
- FOO_ALIAS
- aliasに相当。絞り込み条件やソート条件で使うようなことはない
- DISPLAY_ORDER
- ソートで使う。降順で並べることはない
- COMMENT
- commentに相当。絞り込み条件やソート条件で使うようなことは絶対にない
まずは、classificationDefinitionMap.dfpropにて、isSuppressDBAccessClass を true にします。 もし、Behaviorが必要なテーブル区分値があったら、その区分値だけ false にします。
e.g. Foo区分値のBehaviorを生成しない @classificationDefinitionMap.dfprop
map:{
; Foo = list:{
; map:{
; topComment=...; codeType=String
; isSuppressDBAccessClass = true
}
...
}
...
}
そして、ほとんどの絞り込み条件とソート条件を外します。DISPLAY_ORDERは Desc だけを抑制しています。さらに、InlineView
も抑制しているので、CIQクラスが生成されません。
e.g. テーブル区分値のスーパースリム化の設定例 @includeQueryMap.dfprop
map:{
...
; $prefix:CLS_ = map:{
; suffix:_CODE(String) = list:{}
; suffix:_NAME(String) = list:{}
; suffix:_NAME(OrderBy) = list:{}
; suffix:_ALIAS(String) = list:{}
; suffix:_ALIAS(OrderBy) = list:{}
; DISPLAY_ORDER(Number) = list:{}
; DISPLAY_ORDER(OrderBy) = list:{ !Desc }
; suffix:_COMMENT(String) = list:{}
; suffix:_COMMENT(OrderBy) = list:{}
}
; Relation = map:{
; !ExistsReferrer = map:{ prefix:CLS_ = list:{} }
; !InScopeRelation = map:{ prefix:CLS_ = list:{} }
; !DerivedReferrer = map:{ prefix:CLS_ = list:{} }
; !SpecifiedDerivedOrderBy = map:{ prefix:CLS_ = list:{} }
}
; Myself = map:{
; !InlineView = map:{ prefix:CLS_ = list:{} }
; !ScalarCondition = map:{ prefix:CLS_ = list:{} }
; !MyselfDerived = map:{ prefix:CLS_ = list:{} }
; !MyselfExists = map:{ prefix:CLS_ = list:{} }
; !MyselfInScope = map:{ prefix:CLS_ = list:{} }
}
}
もし、とある区分値だけ DISPLAY_ORDER で降順を使う、というような場合は、OrderByのプロパティ型にて復活指定を追加します。 (わりと多くの区分値で使うのであれば、そもそも除外指定の方を削除しましょう)
e.g. CLS_BAR だけは DISPLAY_ORDER で降順ソートする設定例 @includeQueryMap.dfprop
map:{
...
; OrderBy = map:{
; %Desc = map:{ CLS_BAR = list:{ DISPLAY_ORDER } }
}
; $prefix:CLS_ = map:{
...
}
...
}
もし、とある区分値だけ DerivedReferrer を使う、というような場合は、Relationのプロパティ型にて復活指定を追加します。 (わりと多くの区分値で使うのであれば、そもそも除外指定の方を削除しましょう)
e.g. CLS_BAR だけは DerivedReferrer する設定例 @includeQueryMap.dfprop
map:{
...
; Relation = map:{
; !ExistsReferrer = map:{ prefix:CLS_ = list:{} }
; !InScopeRelation = map:{ prefix:CLS_ = list:{} }
; !DerivedReferrer = map:{ prefix:CLS_ = list:{} }
; !SpecifiedDerivedOrderBy = map:{ prefix:CLS_ = list:{} }
; %DerivedReferrer = map:{ CLS_BAR = list:{} }
}
...
}