DBFlute -- ConditionBeanの基本概念おさらい


色々勘違いされる方もいらっしゃるので、ここでおさらい。

ConditionBeanは、SQL文を組み立てますが、
「select -- from -- where ...」 と、ベタベタに節を指定する感じではないです。

Select句とWhere句(+ OrderBy句)は明示的に指定します。
From句はそれら指定から自動で必要最小限のJoinを自動生成します。

BookCB cb = new BookCB();
cb.setupSelect_Author(); // 【Select句】
cb.query().queryAuthor().setAuthorName_PrefixSearch("ミルコ"); // 【Where句】
cb.query().queryGenre().setGenreName_PrefixSearch("左ハイ"); // 【Where句】
cb.query().addOrderBy_BookName_Desc(); // 【OrderBy句】

↓↓↓

select book.BOOK_ID, book.BOOK_NAME, book...
, author.AUTHOR_ID, author.AUTHOR_NAME...
from BOOK book
left outer join Author author on ...
left outer join Genre genre on ...
where author.AUTHOR_NAME like 'ミルコ%'
and genre.GENRE_NAME like '左ハイ%'
order by book.BOOK_NAME desc


From句の時点で結合先を条件で絞込みたい場合は、inline()を使います。
業務的には「論理削除済みのものは結合対象としない」とかそういった
「結合先条件で基点テーブルは絞り込まない場合」で利用します。
(まあ使用頻度は低いとは思います)

BookCB cb = new BookCB();
cb.setupSelect_Author(); // 【Select句】
cb.query().queryAuthor().inline().setAuthorName_PrefixSearch("ミルコ"); // 【Where句(InlineView)】
cb.query().queryGenre().inline().setGenreName_PrefixSearch("左ハイ"); // 【Where句(InlineView)】
cb.query().addOrderBy_BookName_Desc(); // 【OrderBy句】

↓↓↓

select book.BOOK_ID, book.BOOK_NAME, book...
, author.AUTHOR_ID, author.AUTHOR_NAME...
from BOOK book
left outer join (select * from Author where AUTHOR_NAME like 'ミルコ%') author on ...
left outer join (select * from Genre where GENRE_NAME like '左ハイ%') genre on ...
order by book.BOOK_NAME desc