DBFlute-1.1でLambdaでCB

ここに来て大きなインパクトです。
まだ、続きます。DBFlute-1.1になったら...

1.0.x を安定板として、
1.1では、より最適化を目指します。

Option の Lambda 化

まずは、
Lambda (ラムダ) を使った LikeSearchOption の指定。
cb.query().setSea_LikeSearch("vi"
    , new LikeSearchOption().likeContain());

 ↓↓↓

cb.query().setSea_LikeSearch("vi", op -> op.likeContain());
自分でnewするのをやめます。
拡張できるようにと自分でnewする方式にしていましたが、
拡張はExクラスでのオーバーライドでできるようにし、
Lambdaを使ってスコープの短いオブジェクトにします。

こちら、Option系のほとんどに適用されます。
ManualOrderBean, ColumnConversionOptionなど。

【1.0.xから移行される方のために】
littleAdjustmentMap.dfpropにて戻せます。
(共存させることができます)

isMakeDirectConditionOptionSetup = true
isMakeDirectConditionManualOrder = true

ただし、ColumnConversionOptionは、
機能の利用頻度自体が相当に少ないという想定もあり、
元に戻すオプションは用意されていません。
(コンパイルエラーになった場所を直してくださいませ)

Select の Lambda 化

そして...

これが一番の大きな話だと思いますが、決断しました。
検索するとき、ConditionBean を自分 new しません。
MemberCB cb = new MemberCB();
cb.query().setFormalizedDatetime_IsNotNull();
cb.query().addOrderBy_Birthdate_Desc();
List<Member> memberList = memberBhv.selectList(cb);

 ↓↓↓

List<Member> memberList = memberBhv.selectList(cb -> {
    cb.query().setFormalizedDatetime_IsNotNull();
    cb.query().addOrderBy_Birthdate_Desc();
});
Behavior と ConditionBean の距離を縮めます。
スコープを短くして、予期せぬトラブルを減らしたいと。

現場で、あまりやってもらいたくない再利用をよく見かけました。
ConditionBeanの良いところを無くしてしまうもの。

ConditionBeanの再利用は、細かく部品単位でメソッド化

これを推し進めるインターフェースにしていきたいと考えました。
 -> where句の再利用

【1.0.xから移行される方のために】
littleAdjustmentMap.dfpropにて戻せます。
(共存させることができます)

isMakeDirectConditionBeanSetup = true

並行運用しながら徐々に移行していくことができます。

条件メソッドのシンプル化

そして、以下の条件メソッドが、
デフォルトでは出力されなくなりました。

query().setSea_PrefixSearch()
 -> LikeSearchを使って: op.likePrefix()

query().setSea_DateFromTo()
 -> FromToを使って: op.compareAsDate()

便利なメソッドではありましたが、
逆に LikeSearch や FromTo に気付かないなど、
ちょっと中途半端感がありました。
Lambdaを導入することによって、
LikeSearch や FromTo が書きやすくなったこともあり、
入り口は一つにしようという感じです。

【1.0.xから移行される方のために】
littleAdjustmentMap.dfpropにて戻せます。

isMakeConditionQueryPrefixSearch = true
isMakeConditionQueryDateFromTo = true

BatchUpdateのシンプル化

また、BatchUpdate で更新カラムを明示的に指定する、
オーバーロードメソッドがデフォルトで出力されなくなります。

BatchUpdateは、「むかし」全カラム更新でした。
その回避策として、SpecifyColumnを使ったカラム指定を
導入しました。

いま、BatchUpdateは、
Setter呼び出しのカラムが更新対象です。
 -> 更新系、列挙されるカラムのまとめ

そのため、SpecifyColumnを使ったメソッドの役割は、
あまりなくなりました。
「Setter呼び出しに関わらずこのカラムを更新したい」
ということもあるでしょうが、ケースは少ないだろうと。
また、詰め替えるなどで回避策はあるということで、
シンプル化のために出力されないようにしました。

【1.0.xから移行される方のために】
isMakeBatchUpdateSpecifyColumn = true

で元に戻せます。

1.1は、Java8をふんだんに

1.0.5Lには、こちらまだ含まれていません。

というか、Java8への移行を考えている、
もしくは、Java8で開発し始めようとしている、
という方は、1.1のパイロット版をそろそろ出します。

もう 1.0.x + Java8 じゃなく...

Java8 なら 1.1 で!

リリースが今月中とかでなければ、ぜひ!
できるだけ早く提供できるよう、いま猛烈に実装しています。
良いものにしたいと思っています。