回答編集履歴

1 typo修正

d-yosh

d-yosh score 182

2018/07/05 09:18  投稿

答えを書いてしまうのはアレなので、現状どのように動作するかを解説するので、それを踏まえてもう一度検討していただきたいです。
(listに要素が2つ入っている状態を想定します。)
* foreachはループ開始前に、openで指定された文字列を出力します。今回は"("です。
```sql
WHERE (ユーザーID親, ユーザーID枝) IN (VALUES (
```
* 1つ目の要素を取り出し、foreachtタグ内に記載された内容を出力します。
* 1つ目の要素を取り出し、foreachタグ内に記載された内容を出力します。
```sql
WHERE (ユーザーID親, ユーザーID枝) IN (VALUES ( ユーザID親1, ユーザID枝1
```
* 次のループに進む場合は、separatorで指定された文字列を出力します。今回は","です。
```sql
WHERE (ユーザーID親, ユーザーID枝) IN (VALUES ( ユーザID親1, ユーザID枝1,
```
* 2つ目の要素を取り出し、foreachtタグ内に記載された内容を出力します。
* 2つ目の要素を取り出し、foreachタグ内に記載された内容を出力します。
```sql
WHERE (ユーザーID親, ユーザーID枝) IN (VALUES ( ユーザID親1, ユーザID枝1, ユーザID親2, ユーザID枝2
```
* ループが終了するので、closeで指定された文字列を出力します。今回は")"です。
```sql
WHERE (ユーザーID親, ユーザーID枝) IN (VALUES ( ユーザID親1, ユーザID枝1, ユーザID親2, ユーザID枝2)
```
以上のようなことを踏まえてもう一度Mapper.xmlを検討してみてください。
なお、動作確認環境がないとのことですが、早急に環境を準備することをお勧めします。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る