ホーム DoRuby MyBatisでwhere要素を使った時になぜか先頭の「AND」が取り除かれなかった時の話

MyBatisでwhere要素を使った時になぜか先頭の「AND」が取り除かれなかった時の話

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

仕事でMyBatisを使っているのですが、select文を書いてる際にWHERE句を編集したらSQLがエラーになりました。
ひょっとしたら同じ事でコケる人もいるかもしれないので原因を書いておきます。

MyBatisでSQLを定義するXMLのwhere要素には、中の文字列の先頭がAND|ORだったらそれを取り除く機能があるのですが、今回なぜかそれが機能しませんでした。

よくチェックすると、文字列のANDの後が半角スペースでなく、タブで入っていました。
タブを半角スペースに置き換えたところ、正常にSQLが流れるようになりました。

インデントにタブを使っていると同様の事態に引っかかるかもしれません。
どうしてもタブで書きたいという場合はwhere要素を使わずに
prefixOverrides=”AND★|OR★”(★をタブに置き換える)
とするとうまくいくかもしれません。

参考:
http://mybatis.github.io/mybatis-3/ja/dynamic-sql.html

システムのせいでタグがエスケープしても取り除かれてしまうので色々省略して書いてます。

記事を共有

最近人気な記事