본문 바로가기
Coding/Back-end

[MyBatis] ArrayList로 입력된 파라미터로 조건문 조회하기 - foreach collection 동적쿼리

by 또떠나 leavAgain 2023. 10. 27.
반응형

List로 선언된 parameter를 MyBatis에서 for문으로 조회하는 방법을 알아봅시다.

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CO2ZeroRequest implements Request {
    @ApiModelProperty(value = "",required = true,example = "서울특별시")
    private String param1;

    @ApiModelProperty(value = "",required = true,example = "강남구")
    private String param2;

    @ApiModelProperty(value = "",required = false,example = "압구정동")
    private List<String> param3;
}

아래의 태그를 활용하면 되는데,

<foreach collection="List or Array" item="alias" ></foreach>

예시는 아래와 같습니다.

SELECT
    COLUMN1 AS cnp_cd,
    COLUMN2 AS sgg_cd,
    COLUMN3 AS emd_cd
FROM
    TABLE1
WHERE
    COULMN1 = #{param1}
    AND COLUMN2 = #{param2}
    <choose>
        <when test="param3 == null">
        </when>
        <when test="param3 == ''">
            AND COLUMN3 = #{param3}
        </when>
        <when test="param3.size == 0">
            AND COLUMN3 = ''
        </when>
        <otherwise>
            AND COLUMN3 IN
            <foreach collection="param3" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </otherwise>
    </choose>
GROUP BY
    COLUMN1, COLUMN2, COLUMN3

choose문은 null처리를 위해 사용된 태그이고

맨 마지막 otherwise 태그 내부를 보시면 되겠네요.

 

- collection : List형태로 넘어온 파라미터명을 작성

- item : 별명 부여

- open/close : 위에 보시면 여러개의 파라미터가 한번에 조회되어야 하기때문에 COLUMN3 IN 으로 작성되었죠?

IN뒤에 붙을 괄호를 여기서 설정해준다고 보시면 됩니다.

- separator : 괄호 안에서 파라미터1,파라미터2,파라미터3,...,파라미터n 으로 컴마를 찍어주기 위함

 

이렇게 태그 설정을 입력해주고, foreach 태그 내부에는 별명으로 된 파라미터를 작성해 주면 끝! -> #{item}

728x90