mybatis で配列を渡して反復処理する方法

MyBatisでは、foreachタグを使って配列を渡し、反復処理することが可能です。手順は、次の通りです。

  1. SQL 文で `in` キーワードを使用し、パラメータには `#{}` を使ってください。例:
SELECT * FROM my_table WHERE id IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
    #{item}
</foreach>

この例ではリストは配列引数の名前、アイテムはループ内で使用する配列の各要素の名前、open はin ステートメントの開始を指定、close は終了を指定、separator は区切り文字を指定します。

  1. 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となるよう指定しています。

  1. 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で配列を渡し、反復処理できるようになります。

bannerAds