コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

S2JDBCのexcludesWhitespace

ちょっとはまったのでメモ。動いてみれば、納得の動き。
S2JDBCのSimpleWhereは、プロパティがnullの場合には条件に含まれませんが空文字("")の場合には条件に含まれます(そうでないと困ることもあるかもしれないし)。
ただし、SAStrutsで利用する場合には画面上で何も入力しなければnullではなく空文字がくるので、そのまま空文字の検索がされます。

new SimpleWhere().excludesWhitespace().contains("hoge",
hoge).eq("foo", foo);

とすると、以下のようなSQLになります。

WHERE hoge LIKE ? AND foo = ?

LIKEはともかく、「=」はまずいということで、excludesWhitespaceを使えばいいんですが最初、

new SimpleWhere().excludesWhitespace().contains("hoge", hoge).eq("foo", foo).excludesWhitespace();

としていてうまくいきませんでした。
使うときは、必要な条件を記述する前に書く必要がある。
たとえば、

new SimpleWhere().excludesWhitespace().contains("hoge", hoge).excludesWhitespace().eq("foo", foo);

とすると、

WHERE hoge LIKE ?

となる。
excludesWhitespaceの前に書く条件と書かない条件を明確にする必要があります(普通は全部で問題ないとおもう)。

最初はS2Daoがあるからあんまり使わないかもと思っていたS2JDBCですが、使ってみるとよさげ。
簡単なものなら少なくともSQLを書かなくてもいいというのはかなり楽。複雑なものはSQLを書ける(らしい)から問題ないし。
経験上、へんてこりんな(複雑な)SQLを書くことも多いのでどこまでカバーできるか心配だけど、簡単なプロジェクトでテストしてみたい。
とりあえず、明日、ComplexWhereとSQLを見てみよう。
もう眠いし。