@0.8.6
@Java
(DBFLUTE-380){Java}:
> ConditionBeanで基点テーブルのmax()/min()/avg()/sum()を検索
要は、ConditionBeanで
「select max(MEMBER_BIRTHDAY) from MEMBER where ...」
ってことです。
Date birthday = memberBhv.scalarSelect(Date.class)
.max(new ScalarQuery() {
public void query(MemberCB cb) {
cb.specify().columnMemberBirthday(); // *Point!
cb.query().setMemberStatusCode_Equal_Formalized();
}
});
実は今までちょっとした、
「select max(MEMBER_BIRTHDAY) from MEMBER where ...」
ができなくて、外だしSQLにしていましたが今度からは大丈夫です。
max()/min()/sum()/avg()と選択できます。
sum()とavg()のときは戻り値の方は実質的に数値オンリーですね。
CBの指定の仕方は(Specify)DerivedReferrerと同じような形式です。
specify()を使って単一のカラムを指定します。
こういう感じでCBを「(Query部分を)部分的に利用」するものは、
DBFluteでは基本的にコールバック形式での指定となっております。
(い、い、一部例外あり.....)
dbflute-basic-exampleのBehaviorMiddleTestにてExampleが
ありますので、詳しくはそちらをご覧ください。
https://www.seasar.org/svn/dbflute/trunk/dbflute-basic-example/src/test/java/com/example/dbflute/basic/dbflute/howto/BehaviorMiddleTest.java
【追記】
こちらで自分の記事よりもすごーくわかりすく紹介されています。
ありがとうございます。
http://d.hatena.ne.jp/kimpo/20081126#1227666398