[Seasar-user:12491] [S2JDBC]SQL自動生成 カウントとヒント句

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 1月 13日 (日) 16:13:19 JST


はじめまして、片岡といいます。

自分のプロジェクトでSeasar2を使えないか検討を始めてみたのですが、
DBアクセスまわりは、S2JDBCが今までのプロジェクトのやり方の延長線上で
実施できそうなので、気に入っています。

ただ、「SQL自動生成」機能に関して、ちょっと調べてわからなかったので、
2点ほど、機能が存在するかどうか教えてほしいです。そういった機能がない
ようであれば、今後のエンハンスで対応を検討いただきたいのですが。


1)ページング前の件数取得に関して

ウェブページなどで、総件数を表示して、うち1−20件表示というような
ページをよく見かけます。僕らがやっている実装としては、SELECT COUNT(*)
でまず件数を取得して、ほぼ同様のSQL(ページング実施)で、SELECT以下を
カラム名を変えた形でのSQLを発行するという手段をとります。

ただ、「SQL自動生成機能」では、検索件数をかえすようなメソッドがどうしても
見当たりませんでした。
 とりあえず、自動生成をつかわずに対応できなくはないのですが、件数カウント
も自動生成で対応できれば、より楽なのに、と思わずになりません。

getCount()のようなカウントがとれるようなメソッドがあれば、非常に楽だと思うし、
SELECT配下を書き換えるだけなので、実装もそれほど難しくない気がするのですが...。

Integer count = jdbcManager
         .from(Employee.class)
        .getCount();

List<Employee> results =
    jdbcManager
        .from(Employee.class)
        .getResultList();


2)ヒント句の追加
会社のプロジェクトではORACLEを使うことが多いのですが、どうしても、大きな表の
検索の場合、実行計画が安定しないケースもあり、ヒント句を多用しています。
 
「ヒント句が必要なものなんて、外だしSQLじゃなきゃ書けないような複雑なSQL
じゃないの?」といわれそうですが、メインで使うような大きなテーブルには
いっぱいINDEXがはられていて、こちらの思い通りのINDEXを使ってもらえずに、
INDEXのヒントをいれるというケースが大体のパターンです。

これも外だしSQLにすればできると思うのですが、だいたい、ヒント句をはるのは
カット・オーバーして運用フェイズに入ってしまった後ですから、せっかく自動生
成で作っていたSQLを外だしファイルにかえなければならないとか、結構面倒くさ
いなーと思った次第です。

ORACLEユーザの視点では、ヒント句はSQL分のコメントでしかないので、SQLコメント
追加機能(SELECT文の直後に/*    */をいれてもらえる)さえあれば、それで汎用
的に利用できる気がします。
(MySQLとかではダメですね? SQL文内にきちんとヒント句をかかなきゃいけない
ようなので...)

イメージは以下です。

List<Employee> results =
    jdbcManager
        .from(Employee.class)
        .comment("+ index(T1_  index1) ")
        .getResultList();

これで
 select /*+ index(T1_  index1) */ COLUMN1 from employee というSQLが発行される。

 

 

 
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080113/3815e12e/attachment-0001.html 


Seasar-user メーリングリストの案内