database/mysql

[MyBatis] foreach로 배열 파라미터 삽입

moonsiri 2020. 10. 31. 03:26
728x90
반응형

IN으로 항목을 SELECT 해야 할 때 사용하는 방법입니다.

 

<select id="" ...>
    SELECT *
    FROM table
    where id IN (${list_data})
</select>

 

위 같은 실수를 하지 않길 바랍니다.

아래 코드처럼 foreach문을 사용하면 보안을 유지할 수 있습니다.

 

<select id="" ...>
    SELECT *
    FROM table
    where id IN
    <foreach collection="list" item="map" separator="," open="(" close=")">
        #{map}
    </foreach>
</select>
String[] array;

<select id="" ...>
    SELECT *
    FROM table
    where id IN
    <foreach collection="array" item="map" index="i" separator="," open="(" close=")">
        #{map[i]}
    </foreach>
</select>
ArrayList<String> list = new ArrayList<>();

<select id="" ...>
    SELECT *
    FROM table
    <where>
        <foreach collection="list" item="map" separator="or" open="(" close=")">
            id = #{map}
        </foreach>
    </where>
</select>

 

만약, ### Error querying database. Cause: java.sql.SQLException: ORA-56900: 바인드 변수는 피벗|피벗 해제 작업 내에서 지원되지 않습니다. 란 에러가 발생한다면, 아래와 같이 사용을 해야 합니다.

 

<foreach collection="list" item="item" index="index" separator=",">
	'${item}' AS item${index}
</foreach>
728x90
반응형