ConditionBeanの基本

ConditionBeanとは?

そもそもConditionBeanとは?に関してはこちら

特徴

ConditionBeanは、目的ベースにSQLを組み立てるオブジェクトです。

などの「目的」を指定することで、SQLを安全に実行すること可能です。

実装手順

ex) 基点テーブルを会員(MEMBER)とした場合 @Java
// ## Arrange ##
// = = = = = = = = = = = = = = = = =
// A. 基点テーブルのConditionBeanを生成
//    --> select句, from句)
// = = = = = = = = = = = = = = = = =
MemberCB cb = new MemberCB();// 基点テーブルは「会員」

// = = = = = = = = = = = = = = = =
// B. 取得したい関連テーブルを指定
//    --> select句, from句, join句)
// = = = = = = = = = = = = = = = =
cb.setupSelect_MemberStatus();// 「会員ステータス」を結合してSelect句に展開

// = = = = = = = = = = = = = = = = = = = = = =
// C. 絞り込み条件・ソート条件を設定
//    --> where句, order-by句(, from句, join句)
// = = = = = = = = = = = = = = = = = = = = = =
cb.query().setMemberName_PrefixSearch("S");// 会員名が'S'で始まること
cb.query().addOrderBy_MemberBirthday_Desc();// 会員の生年月日の降順で並べる

// ## Act ##
// = = = = = = = = = = = = =
// D. Behaviorのメソッドを呼ぶ
// = = = = = = = = = = = = =
List<Member> memberList = memberBhv.selectList(cb);// リスト検索

// ## Assert ##
assertNotSame(0, memberList.size());
for (Member member : memberList) {
    log(member.toString());
    assertTrue(member.getMemberName().startsWith("S"));
}

// [SQL]
// select ...
//   from MEMBER member
//     left outer join MEMBER_STATUS status
//       on member.MEMBER_STATUS_CODE = status.MEMBER_STATUS_CODE
//  where member.MEMBER_NAME like 'S%'
//  order by member.MEMBER_BIRTHDAY desc

ConditionBeanの機能

こちら新ドキュメントで作り途中のものです。全てリンク切れですが、一覧として役に立つので先だって公開しています。

setupSelect_Xxx()
関連テーブルの指定(select句、join句)
specify()
主にselect句の補佐的な指定
SpecifyColumn
取得カラムの指定 - cb.specify().columnXxx()
(Specify)DerivedReferrer
子テーブルの導出カラム - cb.specify().derivedXxx(new SubQuery...)
query()
検索条件の指定(where句、orderBy句、from句、join句)
Equal
[=]
NotEqual
[!=]
GreaterThan
[>]
LessThan
[<]
GreaterEqual
[>=]
LessEqual
[<=]
InScope
[in] - in ('foo', 'bar')
NotInScope
[in] - not in ('foo', 'bar')
PrefixSearch
[like] 前方一致
LikeSearch
[like] 前方一致・後方一致・中間一致
Escape
ワイルドカードのエスケープ
SplitBy
区切り文字で複数条件付与
FromTo
汎用FromTo条件 - FOO >= 10 and FOO <= 20
DateFromTo
日付のFromTo条件
ExistsSubQuery
子テーブルの条件で絞り込み(exists) - cb.query().existsXxx(new SubQuery...)
NotExistsSubQuery
子テーブルの条件で絞り込み(not exists) - cb.query().notExistsXxx(new SubQuery...)
InScopeSubQuery
子テーブルの条件で絞り込み(in) - cb.query().inScopeXxx(new SubQuery...)
NotInScopeSubQuery
子テーブルの条件で絞り込み(not in) - cb.query().notInScopeXxx(new SubQuery...)
(Query)DerivedReferrer
子テーブルの導出カラムで絞り込み - cb.query().derivedXxx(new SubQuery...)
ScalarSubQuery
基点テーブルのスカラ値で絞り込み - cb.query().scalar_Equal().max(new SubQuery...)
InlineView
インラインビューでの絞り込み - cb.query().queryXxx().inline().set...
OnClause
on句の絞り込み条件 - cb.query().queryXxx().on().set...
InnerJoin
内部結合の指定 - cb.query().queryXxx().innerJoin();
addOrderBy_Xxx_Asc(Desc)()
orderBy句の指定 - cb.query().addOrderBy_Xxx_Asc()
NullsFirst(Last)
nullを最初(最後)に - ..._Asc().withNullsFirst()
ManualOrder
手動で並べる - ..._Asc().withManualOrder(orderList)
SpecifiedDerivedOrderBy
子テーブルの導出カラムで並べる - cb.query().addSpecifiedDerivedOrderBy...()
Union
union句 - cb.union(new UnionQuery...)
OrQuery
or条件 - cb.orQuery(new OrQuery...)
ColumnQuery
カラム同士の比較での絞り込み - cb.columnQuery(new SpecifyQuery...)
Paging
ページング検索 - cb.paging(pageSize, pageNumber)
FetchFirst
最初のn件だけ取得 - cb.fetchFirst(fetchSize)
LockForUpdate
更新ロック - cb.lockForUpdate()
StatementConfig
StatementのConfiguration(queryTimeoutなど) - cb.configure(statementConfig)
ToDisplaySql
表示用SQL - cb.toDisplaySql()
Genba*Fit
ConditionBean関連の現場フィット
Classification
区分値
FixedCondition
業務的one-to-oneの固定条件
DatabaseDependency
データベース依存機能
WhereRecycle
Where句の再利用
DebugLog
徹底したデバッグログ
ExceptionMessage
デバッグしやすい例外メッセージ
{TwoEdgedSword}
※以下は厳重注意して利用すること
IncludeQuery
条件メソッドの取捨選択
EqualEmptyString
空文字による等値条件(非等値も含む)
DisablePagingReSelect
ページングの再検索の無効化
Various
その他いろいろ
InterfaceDispatch
インターフェース経由での抽象的な利用
TableInfo
テーブル情報の取得 ※DBアクセスしない
Don'tUse
利用してはいけない
{TwoEdgedSword}
※以下は厳重注意して利用すること
EmbedCondition
バインド変数を使わない埋め込み条件
CheckSafetyResult
安全件数のチェック
HasWhereOrderBy
where句・order-by句の有無 ※DBアクセスしない

CB関連のBehaviorのメソッド

こちら新ドキュメントで作り途中のものです。全てリンク切れですが、一覧として役に立つので先だって公開しています。

ConditionBeanを利用するBehaviorのメソッドは以下の通り:

selectEntity(cb)
一件検索。結果がない場合はnullを戻す
selectEntityWithDeletedCheck(cb)
一件検索。結果がない場合は例外発生
selectList(cb)
リスト検索
selectPage(cb)
ページング検索。cb.paging()とセットで利用
selectCursor(cb, entityRowHandler)
カーソル検索。entityRowHandlerで一件ずつメモリ展開して処理
scalarSelect(cb)
スカラ検索。max(), min(), sum(), avg()
LoadReferrer
子テーブルの取得。Refererrテーブル毎にメソッドがある
queryUpdate(entity, cb)
ConditionBeanの条件で更新
queryDelete(cb)
ConditionBeanの条件で削除

DBFluteBasicExample

詳細な機能や仕様に関しては、DBFluteBasicExampleのExample実装をご覧下さい。

DBアクセスを定番化しよう

gihyo.jp連載の「DBアクセスを定番化しよう」も参考になります。

ConditionBeanのスコープ

ConditionBeanと外だしSQLのどちらを使ったらよいのか迷ったら、ConditionBeanのスコープをご覧下さい。

逆引きConditionBean

目的から機能を逆引くドキュメント:逆引きConditionBean

ConditionBeanのポリシー

ConditionBeanのポリシーについて。※概念的なドキュメントです。

Document

Topics