MyBatisでforeachを使用して動的SQLを生成する

MyBatisでforeachを使用して動的SQLを生成する

MyBatisでforeachを使用して動的SQLを生成する事が出来ます。

よくIN句の中で使用されます。

foreachなのでそのまま、dataListをループします。その際、openで「(」、closeで「)」、各リスト事の区切り文字は「,」なので以下のようなSQLコードが生成されます。

バッチなどならバルクインサートで使用したりします。Oracleの場合は、INSERT ALLも参照してください。以下はDB2で確認した例です。

collection=”list”としていますが、java.util.Listを継承するクラスの場合は、collection=”list”と記述します。(インスタンス名がlistでなくても)

配列の場合は、collection=”array”と記述します。

foreachのindexの使い方はこちらを参照ください。ちなみにindexの基底値は0です。

引数にListを渡すのではなく、Beanを渡す場合、getterメソッドが勝手に呼ばれます。

getSchemaメソッド、getYyyyメソッドが実行されます。

Beanを詰めたListをparameterTypeで渡した場合もgetterは実行されました。

Beanのスーパークラスのプロパティのgetterも実行されました。

以下のようなBeanの構成の場合です。

ただし、プロパティがstaticメンバークラスで、foreach内で使用しようとして見た場合は以下エラーが出ました。

そんなプロパティありません、ってことでしょうか?

以下のように使用しようとした時です。(かなり割愛しています)

staticメンバークラスは取得出来ないのかと思っていましたが、そんなことはなく、getterが正しくキャメルケースで記述されていなかった為、動作してくれなかったのが原因でした。

getDBSchmaと言うメソッド名が原因でした。正しくgetDbSchemaにするとgetterが呼ばれました。

なので、以下のような記述方法も可能です。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA