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
반응형