직장에서 mybatis를 사용하고 있으며, 주로 대량 쿼리를 통한 삽입, 업데이트 및 삭제를 사용합니다.
우선 foreach를 사용하여 mybatis에서 반복해서 값을 편집할 수 있는데, 이는 쿼리문을 여러 번 호출하는 대신 쿼리에서 반복적으로 작업할 수 있기 때문에 의미가 있습니다.
1. 모든 컨셉의 마이바티스
다음은 mybatis foreach에서 사용하는 개념입니다.
foreach 문을 올바르게 사용하려면 이 개념에 익숙해야 합니다.
– 수집 : 수신된 인수, 목록 또는 배열 유형만
-기사 : 전달된 인수 값을 별칭 이름으로 바꿉니다.
– 열려 있는 : 문의 시작 부분에 삽입할 문자열
– 닫다 : 문이 끝날 때 삽입되는 문자열
– 구분자 : 반복 사이에 인쇄할 문자열
각 예에 대해(적용, 삽입, 업데이트, 삭제 모두 선택)
먼저 쿼리를 호출하는 매퍼와 예제 모델을 작성해 봅시다.
Class RequestModel {
private String str; // 클라이언트측에서 보내는 문자값 ("A")
private String () arr; // 클라이언트측에서 보내는 배열 (("B","C","D"))
}
// 요청받은 데이터는 문자열과 배열값이 있다고 가정하고 Hashamp에 넣어서 Model값이 있다고 가정하자
Class SqlMapper {
List<ResponseModel> list = sql.selectList(요청받은값);
}
-- 위의 예시처럼 select 문 요청시
1. 아래의 쿼리의 틀이 생깁니다.
(parameterType은 생략가능)
<select id="selectList" resultType="package.ResponseModel">
</select>
2. foreach "in" 사용예제
<select id="selectList" resultType="package.ResponseModel">
SELECT a, b
FROM Table
WHERE b in
<foreach collection="RequestModel.arr" index="index" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</select>
- collection : 전달받은 인자, List나 Array 형태만 가능
- item : 전달받은 인자값을 alias 명으로 대체
- open : 해당 구문이 시작될 때 삽입할 문자열
- close : 해당 구문이 종료될때 삽입할 문자열
- separator : 반복 되는 사이에 출력할 문자열
3. 만약에 b 라는 컬럼에 대해서 in 을 통해서 RequestModel에 있는 arr이라는 값을 통해서
결과를 도출하고 싶을 경우에 mapper에 넣은 model의 정확한 인자 배열 혹은 List를 명시 해주면 됩니다.
그렇기에 collection 부분에는 arr이라는 배열을 명시해주고 item을 alias 명으로 대체해서 사용하면 값이 들어갑니다.
또한 open, close는 반복절의 앞과 뒤에 표기를 해주는것이며 separator는 값을 구분해주기위하여 사용합니다.
그래서 해당 배열 값을 도출하기 위해서는 item이라고 표기를 해주며 만약 일반적인 string 값을 사용할 경우에는
<select id="selectList" resultType="package.ResponseModel">
SELECT a, b
FROM Table
WHERE a = {param.str}
</foreach>
이런식으로 표기 할 수 있습니다.