MVC 프레임워크에서 데이터베이스에 데이터를 넣기 위해 비즈니스 로직에서 for문을 사용하게 된다면,
디비에 접근하는 수만큼 처리 속도나 효율이 떨어지는 것을 확인할 수 있다
떄문에, db 접근을 최소하 하기 위해 Mybatis 개발환경에서는 Mapper에서 사용할 수 있는 foreach 문을 제공한다
이번에는 foreach 문을 제대로 사용하는 방법을 포스팅 한다
VO 객체 내부 리스트 변수를 처리하는 법 등 해당 포스팅과 관련된 포스팅은 아래에서 확인하자
https://hdhdeveloper.tistory.com/60
먼저
Array (배열)과 List(리스트) 를 Mapper로 넘겼을 떄 처리방법
<!-- Array (배열) 을 Mapper 파라미터로 넘겼을 때-->
<update id="updateTest">
UPDATE dm_test
SET a_date = CURRENT_TIMESTAMP(6)
WHERE test_no IN
<foreach collection="array" item="arr" open="(" close=")" separator=",">
#{arr}
</foreach>
</update>
<!-- List (리스트) 을 Mapper 파라미터로 넘겼을 때-->
<select id="findTest" resultType="long">
SELECT test_no
FROM dm_test
WHERE test_no IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
|
cs |
1
updateTest
해당 예제에서는 int 타입의 배열로 데이터를 넘겼다
collection : "array"
파라미터로 배열을 넘겼으면, foreach 문에서 사용하기 위해선 array로 받아야 한다
item="arr"
foreach 태그 안에서, 가져온 배열 파라미터를 사용할 때의 변수 명
2
findTest
해당 예제에서는 Long 타입의 리스트 (List<Long>) 로 파라미터를 전달했다
collection : "list"
리스트로 배열을 넘겼으면, foreach 문에서 사용하기 위해선 list로 받아야한다
item="item"
foreach 태그 안에서, 가져온 배열 파라미터를 사용할 때의 변수 명
또한, 해당 예제에서는 리턴 형식도 List<Long> 타입이라서
resultType에서 Long으로 데이터를 받아야한다
리스트에 객체를 담아서 (List<VO>) foreach를 사용하는 방법
parameterType : List<testVO> testList
testVO column : type, no, test_no
<!--List 내부에 VO를 담아서 사용하기-->
<insert id ="insertTest" parameterType="java.util.ArrayList">
INSERT INTO dm_test(type,no,test_no,date) VALUES
<foreach collection="list" item="arr" separator=",">
(#{arr.type}, #{arr.no},#{arr.test_no}, CURRENT_TIMESTAMP(6),null)
</foreach>
</insert>
|
cs |
리스트 안에 객체가 있는 경우에도 데이터베이스에 한 번의 쿼리문으로 INSERT 시킬 수 있다
1
insertTest
collection : "list"
리스트로 데이터를 넘겼기 때문에 foreach 문에서 사용하기 위해선 list로 받아야한다
( foreach 태그 내부 )
item="arr"
arr 이라고 선언해주었기 때문에, 리스트 내부 객체에 접근할 때,
arr.~~~ 라는 형식으로 접근해야 데이터에 올바르게 접근할 수 있다
'개발 > BACK' 카테고리의 다른 글
[NCP] 네이버 클라우드 서버에 로그 쌓는 법 Cloud Log Analytics (0) | 2022.04.28 |
---|---|
[Mysql] db data export import 데이터베이스 엑셀 export import 하기 (0) | 2022.04.28 |
데이터 베이스 날짜 포맷 설정방법, 날짜 비교 방법 [DATE_FORMAT sysdate() now() 차이] (0) | 2022.04.28 |
SpringFramework 트랜잭션 처리 예제 @Transactional (0) | 2022.04.28 |
[SpringFramework] Error creating bean with name '...' defined in file 해결방법 이유들 (0) | 2022.03.28 |