iBatisのまとめ
いわゆる動的SQLについてちょっとまとめておきます。
結局、複雑な分岐を駆使して、動的SQLをガリガリ書いた方がいいのか、動的SQLの分岐は最低限にして検索結果に頼ったほうが結果的に早いのか、悩ましいところです。結合条件を直すことのほうがよっぽど効果ありました。
私は下手に複雑にしてぐちゃぐちゃになるようであれば、可読性を取って諦めました。改修時も大変だろうし。困ったときはあらかじめパラメータに条件分岐用の値を設定したりと、java,動的SQL,sqlの3方向から考える必要があるんですよ。つまり創造的でちょっと面白いのです。
その後、パフォーマンスチューニングしました。
全体のうちの一部だけ取得するSQL1と総数を取得するSQL2を投げなきゃいけなくて、その間のSQLは全部同じだったから、SQL1に対してcount(*)で取得するようにしました。2回投げる時点でいまいちなのですが、それ以外に方法が・・・。かといえ、件数取得用に最適化すると、改修で漏れる気しかしない。背に腹問題なんですけど、相談すればよかったかな(今更)
さて、dynamicってなんだろう?
「ブロック内で一つでもtrueの場合に追加される」そうです。
http://d.hatena.ne.jp/gsf_zero1/20071204/p2
その他
読めばわかります。
よく使うのは、
iterateとisNotEmptyと
それらのパラメータとしてprepend, property, close, conjunction, openを覚えておけば問題ないです・・・。