CB - InterfaceDispatch
概要
アーキテクト向けの機能です。
ConditionBeanには、インターフェースディスパッチ(抽象実装)ができるように、インターフェース経由で機能が利用できるメソッドが用意されています。
通常の利用では必要ありませんので、 "知ってしまったら使ってしまいそう" と思われる方は、このページは読まずに、すぐにDBFlute内の適当なページに飛んで下さい。
インターフェースメソッド
それぞれの ConditionBean は、"ConditionBean" というインターフェースを実装しています。
データ取得
- invokeSetupSelect()
- 指定されたプロパティ(foreignPropertyNamePath)に対応するリレーションを SetupSelect します。プロパティ名は、"." (ドット)つなぎでネストした階層を辿っていくことが可能です。
絞り込み・ソート条件
ConditionQuery も同様に "ConditionQuery" というインターフェースを実装しています。
- localCQ()
- query() で取得される ConditionQuery をインターフェース形式で取得します。
- localCQ().invokeValue()
- 指定されたカラム名(columnFlexibleName)の ConditionValue を取得します。
- ※アプリでは基本的に必要としません。
- localCQ().invokeQuery()
-
絞り込み条件を設定します。
- columnFlexibleName
- カラム名 (Flexible)。"." (ドット)つなぎでリレーションを表現できる
- conditionKeyName
- 比較条件のキー名 (Equal, LessThan など)
- value
- 条件値 (Object型)
- option
- ConditionOption (LikeSearchOptionなど)。オーバーロード引数。
- localCQ().invokeQueryEqual()
- 頻度が高いと想定されている Equal に特化した invokeQuery() です。比較条件の指定がありません。
- localCQ().invokeOrderBy()
-
ソート条件を設定します。
- columnFlexibleName
- カラム名 (Flexible)。"." (ドット)つなぎでリレーションを表現できる
- isAsc
- 昇順かどうか (false なら降順)
- localCQ().invokeForeignCQ()
- 指定されたプロパティ(foreignPropertyName)に対応する関連テーブルの ConditionQuery を取得します。プロパティ名は、"." (ドット)つなぎでネストした階層を辿っていくことが可能です。
- localCQ().invokeHasForeignCQ()
- 指定されたプロパティ(foreignPropertyName)に対応する関連テーブルの ConditionQuery があるかどうかを判定します。プロパティ名は、"." (ドット)つなぎでネストした階層を辿っていくことが可能です。
- ※アプリでは基本的に必要としません。
PKを抽象的に扱うメソッド
PKのデータ型、および、単一PKなのか複合PKなのか、これらを吸収して抽象的に実装するためのメソッドが用意されています。
- acceptPrimaryKeyMap()
- PrimaryKey の値が格納された Map を受け取って、等値条件を設定するメソッドです。 DBMeta の extractPrimaryKeyMap() を使って取得した Map を利用すれば、Entity に格納されている PK の値をそのまま ConditionBean に登録できます。
- [PKのカラム名] = [PKの値] という形式で登録されている必要があります。
- addOrderBy_PK_Asc()
- PK の昇順(Asc)で OrderBy を設定します。
- addOrderBy_PK_Desc()
- PK の降順(Desc)で OrderBy を設定します。
e.g. PKを抽象的に扱って一件検索 @Java
BehaviorReadable bhv = ...
Entity entity = ... // 例えば、PKのみ格納されてるとして
// PKの等値条件
ConditionBean cb = bhv.newConditionBean();
cb.acceptPrimaryKeyMap(entity.getDBMeta().extractPrimaryKeyMap(entity));
Entity entity = bhv.readEntity(); // 指定されたPKで一件検索
テーブルのメタデータ
getDBMeta() から DBMeta インターフェースを取得できます。
テーブルに依存しないメソッド
幾つかのそもそもメソッド仕様がテーブルに依存しないメソッドが、インターフェースメソッドになっています。 以下、主なものを列挙しています。
- paging()
- enablePagingCountLater()
- disablePagingReSelect()
- fetchFirst()
- fetchScope()
- fetchPage()
- lockForUpdate()
- checkSafetyResult()
- checkInvalidQuery()
- configure()
- toDisplaySql()
- hasWhereClause()
- hasOrderByClause()
- clearOrderBy()