728x90
반응형
Mybatis - foreach 사용법 및 예제
간혹 동적 쿼리를 이용하는데 sql을 여러번이용해 Data를 List형태로 꺼낼때가 효율성이 떨어질 때가 있다.
우리는 효율적인 프로그래밍을 지향하기 때문에 반복해서 쿼리를 수행하는 것에 대해 조금 더 효율적인 방법을 생각하고 이행할 필요가 있다.
오늘은 Mybatis에 foreach문법에 대해 기록할 것이다.
💡 Mybatis 문법
foreach문법을 사용하기 전 각 문법 형태
collection | 전달받은 인자 값 - List나 Array형태만 가능 |
item | 전달받은 인자 값의 alias 명 |
open | 해당 구문이 시작될 때 삽입할 문자열 |
close | 해당 구문이 종료될 때 삽입할 문자열 |
separator | 반복 되는 사이에 삽입할 문자열 |
index | 반복되는 구문 번호(목록의 위치 값) |
SELECT
*
FROM MN_CS
WHERE CS_ID IN
('moon','sun','water')
💡 select 구문의 foreach활용
List<String> inList = new ArrayList<String>();
inList.add("moon");
inList.add("sun");
inList.add("water");
SELECT
*
FROM MN_CS
WHERE CS_ID IN
<foreach collection='list' index='index' item='csId' open='(' close=')' separator=','>
#{csId}
</foreach>
전달되는 inList를 sql mapper에서 위와같이 작성하여 foreach구문을 활용할 수 있다.
위처럼 작성하게 되면 실제로 실행되는 sql은 아래와 같다.
SELECT
*
FROM MN_CS
WHERE CS_ID IN ('moon','sun','water')
해당 예제는 IN문으로 예를 들었기 때문에 시작(open)과 종료(close)에 각 각 '(', ')'를 명시해 준 것이다.
// 배열의 경우에도 전달만 배열로하고 foreach의 collection에 array라고 명시만 해주면 된다.
String[] inArr = {"moon","sun","water"};
// <foreach collection = 'array' ....> ... </foreach>
💡 insert 구문의 foreach 활용
예제에 파라미터로 활용될 VO 객체이다.
public class TestVO {
private String idx;
private String csId;
private String csNm;
public void setIdx(String idx) {
this.idx = idx;
}
public void setCsId(String csId) {
this.csId = csId;
}
public void setCsNm(String csNm) {
this.csNm = csNm;
}
}
아래와 같이 전달 할 LIST를 SET한다.
List<TestVo> inList = new ArrayList<TestVo>();
TestVo testVo = null;
testVo = new TestVo();
testVo.setCsId("moony");
testVo.setCsNm("무니");
inList.add(testVo);
testVo = new TestVo();
testVo.setCsId("devlog");
testVo.setCsNm("개발자");
inList.add(testVo);
<insert id="insertCsInf" parameterType="java.util.List" >
<foreach collection="list" item="item" open="INSERT ALL" close=""
separator=" ">
INTO MN_CS(
IDX
, CS_ID
, CS_NM
, REG_DTM
, UPDT_DTM
) VALUES (
MN_CS_SEQ.NEXTVAL
, #{item.csId}
, #{item.csNm}
, SYSDATE
, SYSDATE
)
</foreach>
</insert>
728x90
반응형
'Programming > Spring' 카테고리의 다른 글
[Spring] WebFlux란 무엇인가? - 개념(특징), MVC와 비교, 사용 이유 (0) | 2022.12.26 |
---|---|
[Spring] MVC1, MVC2 개념 및 차이점 / Spring MVC 동작과정 (1) | 2022.07.17 |
[JPA] findBy를 이용한 쿼리 메소드 작성하기(조건처리, like구문 처리) (0) | 2022.02.02 |
[Spring MVC] Dispatcher Servlet 이란? -(FrontController패턴 포함) (2) | 2021.06.15 |
[Spring] RestController, ResponseEntity란? (Controller와 RestController의 차이점 포함) (0) | 2021.05.24 |