mybatis で配列を渡して反復処理する方法
MyBatisでは、foreachタグを使って配列を渡し、反復処理することが可能です。手順は、次の通りです。
- SQL 文で `in` キーワードを使用し、パラメータには `#{}` を使ってください。例:
SELECT * FROM my_table WHERE id IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
この例ではリストは配列引数の名前、アイテムはループ内で使用する配列の各要素の名前、open はin ステートメントの開始を指定、close は終了を指定、separator は区切り文字を指定します。
- Mapper XMLファイルでforeachタグを利用して配列を反復する:
<select id="getData" parameterType="java.util.List" resultType="com.example.MyTable">
SELECT * FROM my_table WHERE id IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
本サンプルでは、getDataがSQL文のID、parameterTypeで引数の型がjava.util.List、resultTypeで戻り値の型がcom.example.MyTableとなるよう指定しています。
- Javaコードでは、検索するIDのリストを含むリストオブジェクトを渡します
List<Integer> ids = Arrays.asList(1, 2, 3, 4);
List<MyTable> data = sqlSession.selectList("getData", ids);
この例では、idsは照会するIDを含むListオブジェクトで、getDataはSQL文のID、sqlSessionはMyBatisのセッションオブジェクトで、selectListメソッドは照会を実行して結果を返します。
上記の手順により、MyBatisで配列を渡し、反復処理できるようになります。