ConditionBean
- ConditionBeanの基本
- ConditionBeanの機能
- ConditionBeanのExample
- ConditionBeanのスコープ
- Effective ConditionBean
- ひとめでConditionBean
ConditionBeanの基本
- ConditionBeanについて
- ConditionBeanとは?概念やその存在意義などわりと事務的な話
- ConditionBeanの使い方
- 実装手順やコード補完など ※ディベロッパーは必ず一度は目を通しましょう
ConditionBeanの機能
データの取得
- 取得できるカラム
-
- 基点テーブルのカラム (デフォルト) - new FooCB()
- many-to-one, one-to-one のカラム : setupselect(Relation) - cb.setupselect_Foo() (.with...)
- 業務的one-to-one のカラム : setupselect(BizOneToOne) - cb.setupselect_Foo(value) (.with...)
- one-to-many のカラム (バッチフェッチ) : Behavior.LoadReferrer - bhv.loadFooList(...)
- 子テーブルの導出カラム (one-to-many) : (specify)DerivedReferrer - cb.specify().derivedFooList()...
- 取得に関する調整
-
- 取得カラムの指定 : specifyColumn - cb.specify().columnFoo(), cb.specify().specifyFoo().column...
- 結果セットの統合 : UnionQuery - cb.union(new UnionQuery...), cb.unionAll(new UnionQuery...)
データの絞り込み
- 利用できるカラム
-
- 基点テーブルのカラム : Query - cb.query().set...
- many-to-one, one-to-one のカラム (*1) : Query(Relation) - cb.query().queryFoo().set...
- 業務的one-to-one のカラム (*1) : Query(BizOneToOne) - cb.query().queryFoo(value).set...
- 子テーブルのカラム (one-to-many) (*2) : ExistsReferrer - cb.query().existsFooList(new subQuery...)
- 子テーブルの導出カラム (one-to-many) : (Query)DerivedReferrer - cb.query().derivedFooList()...
- 絞り込み条件
-
- 等値 (=) : Equal - cb.query().setFoo_Equal(value)
- 非等値 (<>) : NotEqual - cb.query().setFoo_NotEqual(value)
- 大なり (>) : GreaterThan - cb.query().setFoo_GreaterThan(value)
- 小なり (<) : LessThan - cb.query().setFoo_LessThan(value)
- 大なりイコール (>=) : GreaterEqual - cb.query().setFoo_GreaterEqual(value)
- 小なりイコール (<=) : LessEqual - cb.query().setFoo_LessEqual(value)
- 対象値の列挙 (in ('a', 'b')) : Inscope - cb.query().setFoo_Inscope(valueList)
- 曖昧検索の条件 (Likesearch条件) : Likesearch - cb.query().setFoo_Likesearch(value, option)
- null かどうか (is null) : IsNull - cb.query().setFoo_IsNull()
- null か空文字かどうか (is null or empty) : IsNullOrEmpty - cb.query().setFoo_IsNullOrEmpty()
- null でないかどうか (is not null) : IsNotNull - cb.query().setFoo_IsNotNull()
- 日時の汎用的なFromTo条件 (FromTo条件) : FromTo - cb.query().setFoo_FromTo(...)
- 日付の定型的なFromTo条件 (DateFromTo条件) : DateFromTo - cb.query().setFoo_DateFromTo(...)
- 数値の汎用的なRangeOf条件 (RangeOf条件) : RangeOf - cb.query().setFoo_RangeOf(...)
- 子テーブルの条件で絞り込み (exists) : ExistsReferrer - cb.query().existsFooList(new subQuery...)
- 関連テーブルの条件で絞り込み (in) : InscopeRelation - cb.query().inscopeFooList(new subQuery...)
- 子テーブルの導出カラムで絞り込み : (Query)DerivedReferrer - cb.query().derivedFooList()...
- 自分自身の導出値との比較で絞り込み : (Myself)scalarCondition - cb.query().scalar_Equal().max(...)
- 自分自身の回避的サブクエリで絞り込み : MyselfInscope - cb.query().myselfInscope(new subQuery...)
- カラム同士の比較で絞り込み : ColumnQuery - cb.columnQuery(new specifyQuery...).lessThan...
- 連結条件
-
- デフォルトは "and 条件" : Query - cb.query().set...
- 明示的な指定で "or 条件" も可能 : OrscopeQuery - cb.orscopeQuery(new OrQuery...)
- 絞り込みに関する調整
-
- "on 句" による結合前の絞り込み : OnClause - cb.query().queryFoo().on().set...
- インラインビューによる結合前の絞り込み : InlineView - cb.query().queryFoo().inline().set...
- ページング条件 : Paging - cb.paging(20, 4)
- "先頭のn件" 条件 : FetchFirst - cb.fetchFirst(20)
データの並び替え
- 利用できるカラム
-
- 基点テーブルのカラム : Query - cb.query().addOr...
- many-to-one, one-to-one のカラム (*1) : Query(Relation) - cb.query().queryFoo().addOr...
- 業務的one-to-one のカラム (*1) : Query(BizOneToOne) - cb.query().queryFoo(value).addOr...
- (one-to-many)子テーブルの導出カラム : specifiedDerivedOrderBy - cb.query().addspecifiedDer...
- 並び替え条件
-
- 昇順・降順ソート : OrderBy - cb.query().addOrderBy_Foo_Asc()
- 指定した値の順番で並べる : ManualOrder - cb.query().addOrderBy_Foo_Asc().withManualOrder(orderList)
- null を先・後に並べる : NullsFirst/Last - cb.query().addOrderBy_Foo_Asc().withNullsFirst()
検索スタイル
- DomainEntityのオブジェクトグラフ
-
- 一件検索 (Entity) : Behavior.selectEntity() - bhv.selectEntity(cb)
- リスト検索 (ListResultBean) : Behavior.selectList() - bhv.selectList(cb)
- ページング検索 (PagingResultBean) : Behavior.selectPage() - bhv.selectPage(cb)
- カーソル検索 (一件ずつフェッチ) : Behavior.selectCursor() - bhv.selectCursor(cb, new EntityRow...)
- (一般的な)集計関数を使ったスカラ値
-
- カウント検索 (select count(*)) : Behavior.selectCount() - bhv.selectCount(cb)
- スカラ検索 (select max(...)) : Behavior.scalarselect() - bhv.scalarselect(type).max(...)
その他
- 検索全体に関する調整
-
- 更新ロック (各種DBMsの構文を利用) : LockForUpdate - cb.lockForUpdate()
- InnerJoinの自動判別 (チューニング用) : InnerJoinAutoDetect - cb.allowInnerJoinAutoDetect()
- JDBCパラメータの指定 (queryTimeoutなど) : statementConfig - cb.configure(...)
- DBMs依存の機能 (ロックや全文検索など) : DatabaseDependency
- 無効な条件のチェック (無効な条件があったら例外) : CheckInvalidQuery - cb.checkInvalidQuery()
- {TwoEdgedsword}
- ※以下は厳重注意して利用すること
-
- EmptystringQuery
- 空文字条件の許可 (空文字を有効な値として扱う)
- ChecksafetyResult
- 安全件数のチェック (指定件数以上なら例外)
- DisableRelationMappingCache
- 関連テーブルのインスタンスキャッシュを無効化 (まず不要な機能)
- (Manual)InnerJoin
- 結合方式を明示的に内部結合に(危険要注意)
- EmbedCondition
- バインド変数なし埋め込み条件 (危険要注意)
- PagingselectAndQuerysplit
- ページング検索でselect句とwhere句を分割実行
- その他いろいろ
-
- 表示用sQLの取得 (外だしsQLの土台) : ToDisplaysql - cb.toDisplaysql()
- PKの抽象化 (複合主キー対応) : PrimaryKeyAbstraction
- インターフェース経由での抽象的な利用 : InterfaceDispatch
- テーブルのメタデータの取得 (DBアクセスなし) : TableInfo
- 利用してはいけない : Don't Use
ConditionBeanのExample
ConditionBean の Example プロジェクトがありますのでぜひ参考に。
DBFlute Example - 基本的な HowTo
ConditionBeanのスコープ
ConditionBean と 外だしsQL のどちらを使ったらよいのか迷ったら?
Effective ConditionBean
ConditionBean の効果的な使い方の指南
ひとめでConditionBean
とにかく、パッと見たかったら