DBFlute-1.0.5J Released

DBFlute-1.0.5J was released.
(ごーじぇいです、めいじぇい)

DBFlute Top
Change Log
Migration Point

オープンソースプロダクト「DBFlute」
のリリース通知です。
(プログラマー向けの内容です)
まず、一つ、自動生成される Behavior のソースコードの
サイズが半分くらいになりました。(コンパイル後の.classのサイズ)
具体的には、インナークラスが減って .class ファイルが減りました。
そして、LoadReferrerに新しいインターフェースが。

DBFlute の LoadReferrer、
とても強力な one-to-many のための道具ですが、
one-to-many-to-many, many-to-one-to-many
など様々なリレーションを同時に辿るようなとき、
ちょっと、ゴタゴタしてしまいます。

LoadReferrerOptionをnewしたり、
pulloutで親テーブルのリストを抽出したり、
ちょっと手続き的なことが多くなります。

そこで、

Loader方式 @since 1.0.5J

詳しくの上のリンクに書いてありますが、
ここでは Lambda で書いてみましょう。
MemberCB cb = new MemberCB();
cb.query()...
List<Member> memberList = memberBhv.selectList(cb);

memberBhv.load(memberList, loader -> {
    // [one-to-many-to-many]
    // 会員から購入を取得、さらに、購入支払を取得
    loader.loadPurchaseList(purchaseCB -> {
        purchaseCB.query()...
    }).withNestedReferrer(loader -> {
        loader.loadPurchasePaymentList(paymentCB -> {
            paymentCB.query()...
        });
    });
    // [many-to-one-to-many]
    // 会員から会員ステータスを経由して、会員ログインを取得
    // (会員ステータスが setupSelect されていることが前提)
    loader.pulloutMemberStatus().loadMemberLoginList(loginCB -> {
        loginCB.query()...
    });
});
リストを取り扱う手続きを省略しています。
今までの Load メソッドのオーバーロードで迷うこともありません。

どんどんアプリの画面はリッチになっていきます。
一回の検索で取得するデータもどんどん多くなって来ました。
昔は、LoadReferrerでそんなにたくさん関連テーブルを並べることは
珍しかったと思うのですが、最近では日常茶飯事です。

ということで、こういった
「ERDのリレーションを辿っているかのような」インターフェース、
とってもうれしいかなって。実装しながら自分では思います。
もともと、SetupSelect や QueryRelation は
そういう感じでしたから、LoadReferrer も追いついたかなと。

Java8 の Lambda があるからこそという感じなので、
1.1 からと考えていたのですが、
なんだかんだ、1.0.x 系も長生きしますから、
先立って実装してみました。

ぜひ、使ってくださいませ♪
...
...

さて、あと一つ、
1.1 までにやっておきたいことがあります。

それはまた