Re:Start

いまはディレクターやってます

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を覚えておけば問題ないです・・・。

あと気をつけたいのは、

この記述はxmlで行われるということです。
つまり、<>は使えないのだー。
使いたい場合は、[CDATA]とかで挟んで使う必要がありますよ。(ほんとは<>で囲む)
コミット前にXMLの妥当検査とか使ってみると気休め程度ですがいいですね。