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
とにかく、パッと見たかったら