<foreach>
collection ์ธ์(Map, Array, List, Set ๋ฑ..) ๊ฐ์ผ๋ก ๋ฐ๋ณต์ ์ธ SQL ๊ตฌ๋ฌธ์ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. (OR ๋๋ IN ๊ตฌ๋ฌธ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.)
foreach๋ 6๊ฐ์ ์์ฑ์ด ์๋ค.
- collection - ์ ๋ฌ๋ฐ์ ์ธ์ (Map, Array, List, Set๋ฑ๊ณผ ๊ฐ์ ๊ฐ์ฒด)
- item - collection ์์ฑ์์ ์ ๋ฌ๋ฐ์ ์ธ์๊ฐ์ alias๋ช ์ผ๋ก ๋์ฒด
- open - ํด๋น ๊ตฌ๋ฌธ์ด ์์๋ ๋ ์ฝ์ ํ ๋ฌธ์์ด
- close - ํด๋น ๊ตฌ๋ฌธ์ด ์ข ๋ฃ๋ ๋ ์ฝ์ ํ ๋ฌธ์์ด
- separator - ๋ฐ๋ณต๋๋ ๊ตฌ๋ฌธ ์ฌ์ด์ ์ฝ์ ํ ๋ฌธ์์ด (๊ตฌ๋ฌธ์ ๋ถ๋ฆฌํ๊ธฐ ์ํ ๋ฌธ์)
- index - ๋ฐ๋ณต๋๋ ๊ตฌ๋ฌธ ๋ฒํธ. 0๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐ
์์
a, b, c๊ฐ ๋ด๊ฒจ ์๋ list๊ฐ ์๊ณ , ํด๋น list์ ํด๋นํ๋ ๊ฐ์ ๊ตฌํ๊ณ ์ ํ ๊ฒฝ์ฐ
SELECT
name, type, value
FROM sample
WHERE 1 = 1
AND region = #{region}
<foreach collection="valueList" item="type" open="(" close=")" separator="or">
type = #{type}
</foreach>
๋ ์ ํํ ์กฐ๊ฑด์ ํด๋นํ๋ ์๋ณ ํต๊ณ๋ฅผ ๊ตฌํ๊ธฐ ์ํด <foreach> ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค. (oracle, tibero ์ฟผ๋ฆฌ)
<foreach collection="monthArr" item="item" separator=" , " open = "," close="" >
SUM(NVL(CASE WHEN B.DATE_ =#{item} THEN B.CNT END, 0))
</foreach>
monthArr์๋ ์ฌ์ฉ์๊ฐ ์ ํํ ์กฐ๊ฑด์ด ๋ด๊ฒจ์๋๋ฐ
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ด ์กฐ๊ฑด์ ์ ๋ ฅํ๊ณ ์กฐํ๋ฅผ ํ๋ค๋ฉด monthArr์๋ 2021-11, 2021-12, 2022-01 ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
, SUM(NVL(CASE WHEN A.DATE_ = '2021-11' THEN A.CNT END, 0)) AS "2021-11"
, SUM(NVL(CASE WHEN A.DATE_ = '2021-12' THEN A.CNT END, 0)) AS "2021-12"
, SUM(NVL(CASE WHEN A.DATE_ = '2022-01' THEN A.CNT END, 0)) AS "2022-01"
open ์์ฑ์ ์ฝค๋ง๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์ฒซ ์์์ด ์ฝค๋ง๋ก ์์๋์๊ณ , ๋ฐ๋ณต๋ฌธ์ ๊ตฌ๋ถํ๋ ์์ฑ์ธ separator์ ์ฝค๋ง๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ด์ ์ฝค๋ง๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ close ์์ฑ์ ์๋ฌด๊ฐ๋ ์ธํ ํ์ง ์์์ ๋ฐ๋ณต๋ฌธ์ ๋์ ์๋ฌด ๋ฐ์ดํฐ๋ ์๋ค.
'๊ฐ๋ฐ > MyBatis' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MyBatis] ๋ณ์ ์ฌ์ฉ์ #{value}, ${value}์ ์ฐจ์ด (1) | 2021.11.30 |
---|
๋๊ธ