EzJDBCとS2JDBCのイテレータ機能の違い

今回は、EzJDBCとS2JDBCイテレータ機能を比較してみようと思います。
イテレータ機能は皆さんご存知の通り、テーブルの照会結果をList等で一括に取得する方法とは異なり、照会結果を1レコードづつ取得する方法です。


それでは早速それぞれのO/R マッパーの記述方法を見て見ましょう。
今回の例として、EMPLOYEEテーブルの全レコードのSALARYを合算した結果を求めるソースで説明します。
ちなみに…COUNTを使えば算出できるのは分かっていますが、あくまでもITERATEの例ですからね(^^;)


まずはS2JDBCから見てみましょう。。。

public void testIterate() throws Exception {
    long sum =
        jdbcManager.from(Employee.class).iterate(
            new IterationCallback() {
                private long sum;
                public Long iterate(Employee emp, IterationContext context) {
                    sum = sum + emp.salary;
                    return sum;
                }
            });
    System.out.println(sum);
}


では次にEzJDBCを見てみましょう。。。

public void testIterate() throws Exception {
    long sum = 0L;
    EMPLOYEE EMP = new EMPLOYEE();
    JDBCIteratoe iterator = EzJDBC.froms(EMP).iterator(Employee.class);
    while(iterator.hasNext()) {
        Employee emp = iteratoe.next();
        sum = sum + emp.salary;
    }
    iterator.end();
    System.out.println(sum);
}

同じイテレータ機能でも結構違うもんですね。
例えばS2JDBCは匿名クラスを利用することにより、JDBCIterator#end()メソッドの様に読み込み終了の処理を記述する必要はありません。この点でいえばS2JDBCの方が優れていると言えます。
またS2JDBCはEzJDBCの様に(メイン)テーブル情報インスタンスを生成する必要はありません。

う〜ん、少し見直した方が良いかなぁ(・・?
最終的には、直感的に理解できるコードになるのが大事なんですけど…う〜ん><