IN
- 여러 값을 OR 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 때 쓸 수 있는 키워드
- 값은 콤마( , )로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가됨
in 절은 조건이 여러개인 경우 ('조건1','조건2','조건3) 과 같은 문법으로 사용 가능하다.
WHERE report_id in ('1,'2','3')
이 문법을 java 소스에서 List<String> 타입으로 데이터를 넘겨주어서 사용 하고 싶다면? 아래 코드 복사시 사용 가능
where 조건 in
<foreach item="item" collection="checkedIdList" open="(" close=")" separator=",">
#{item}
</foreach>
주의점 ! 조건 in 은 꼭 foreach 바깥에 써주세요
myBatis의 forEach로 반복을 돌리면서 separatort(구분자)에 쉼표(,)를 배치해주는 과정이 아래와 같다.
= 즉, in('1','2','3') 을 만들어 주는 과정인데, 파라미터로 id List를 넘겨줘서 Mybatis로 동적 바인딩 하는 과정이다.
<update id="updateReportApproval" parameterType="Map">
<choose>
<when test="checkedIdList.size != 0">
UPDATE report
SET report_approval = 1
-- 조건 부분은 for each 구문 밖에
WHERE report_id in
<foreach item="item" collection="checkedIdList" open="(" close=")" separator=",">
#{item}
</foreach>
</when>
</choose>
</update>
1. <foreach>로 반복을 돌린다.
2. collection : 반복구의 길이는 List 형태의 parameter인 checkedIdList의 길이 만큼이다.
(checkedIdList: 넘겨줄 때의 파라미터명)
3. open : 시작부분에 오는 문자열을 지정할 수 있다.
4. close : 끝부분에 오는 문자열을 지정할 수 있다.
5. separator : 구분자를 지정할 수 있다.
'BackEnd > MyBatis' 카테고리의 다른 글
[Spring Boot] [MyBatis] xml 에서 스네이크 표기법을 camelCase로 자동 변환 / resultMap 지정하지 않고 사용하기 (0) | 2022.06.15 |
---|---|
[MyBatis] resultMap (0) | 2020.11.16 |
[MyBatis] 반복되는 쿼리 묶기_<sql/><include/> (0) | 2020.08.31 |