EzJDBCで件数を取得する!


id:hiro_nemuさんのblogで、以下のエントリを見つけたのでEzJDBCの場合を書いてみる。。。

S2JDBCで件数を取得する(SELECT COUNT(*))

ページング処理するときlimit, offsetを指定したデータ取得用SQLと、総件数を取得するSQLってSQL自体大体同じ内容なので、何かいい方法があるんじゃないかと思ったら案の定ありました。総件数を取得するには、getCount()メソッドを使うらしい。
中略…

http://d.hatena.ne.jp/hiro_nemu/20090924

EzJDBCで件数を指定して結果を取得する方法は以下の通りになる…

 // テーブル情報インスタンスを生成
 CUSTOMER _CS = new CUSTOMER();
 // CUSTOMERテーブルを照会
 List<Customer> list = new EzJDBC().from(_CS).where(_CS.NAME.likeBegin("TAKA"))
                  .orderBy(_CS.AGE.desc(),_CS.NAME.asc())
                  .limit(10).offset(101)
                  .find(Customer.class);

で、EzJDBCで件数(count)を取得する方法は、以下の通りになる…

 // テーブル情報インスタンスを生成
 CUSTOMER _CS = new CUSTOMER();
 // CUSTOMERテーブルより件数を取得
 long count = new EzJDBC().from(_CS).where(_CS.NAME.likeBegin("TAKA"))
                  .orderBy(_CS.AGE.desc(),_CS.NAME.asc())
                  .limit(10).offset(101)
                  .count();

違いは、findメソッドを呼び出すか、countメソッドを呼び出すかだけ。。。

countメソッドが呼び出された場合は、「limit,offset,orderBy」メソッドの指定は無視され以下のSQLが発行される。

SELECT COUNT(*) FROM (SELECT * FROM CUSTOMER CS WHERE CS.NAME LIKE 'TAKA%') CS_

件数を取得するのに並び順は関係ないからね(^^;)