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の様に(メイン)テーブル情報インスタンスを生成する必要はありません。
う〜ん、少し見直した方が良いかなぁ(・・?
最終的には、直感的に理解できるコードになるのが大事なんですけど…う〜ん><