๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/MyBatis

[MyBatis] ๋ฐ˜๋ณต๋˜๋Š” ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ <foreach>

by ynzu๐Ÿค 2022. 1. 6.
๋ฐ˜์‘ํ˜•

 

<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 ์†์„ฑ์€ ์•„๋ฌด๊ฐ’๋„ ์„ธํŒ…ํ•˜์ง€ ์•Š์•„์„œ ๋ฐ˜๋ณต๋ฌธ์˜ ๋์— ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์—†๋‹ค.

 

 

728x90
๋ฐ˜์‘ํ˜•

'๊ฐœ๋ฐœ > MyBatis' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[MyBatis] ๋ณ€์ˆ˜ ์‚ฌ์šฉ์‹œ #{value}, ${value}์˜ ์ฐจ์ด  (1) 2021.11.30

๋Œ“๊ธ€