본문 바로가기

개발/BACK

[SpringFramework] foreach 반복문 list array 처리하기

728x90

 

 

MVC 프레임워크에서  데이터베이스에 데이터를 넣기 위해 비즈니스 로직에서 for문을 사용하게 된다면,

디비에 접근하는 수만큼 처리 속도나 효율이 떨어지는 것을 확인할 수 있다

 

떄문에, db 접근을 최소하 하기 위해 Mybatis 개발환경에서는 Mapper에서 사용할 수 있는 foreach 문을 제공한다

이번에는 foreach 문을 제대로 사용하는 방법을 포스팅 한다

 

VO 객체 내부 리스트 변수를 처리하는 법 등 해당 포스팅과 관련된 포스팅은 아래에서 확인하자

 

https://hdhdeveloper.tistory.com/60

 

Mapper XML MyBatis resultMap 사용하기 ( List 불러오기, 반복문 없이)

나는 현재까지 개발하면서 ResultMap의 존재를 몰랐다. 그래서 1 : N 의 구조나 N : N 의 구조에서 데이터를 가지고 올 때, Service Layer에서 항상 for문을 돌려서 DB에 여러번 접근하는 것으로 해결거나 DB

hdhdeveloper.tistory.com

 


 

먼저

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.~~~ 라는 형식으로 접근해야 데이터에 올바르게 접근할 수 있다

 

 

 

728x90