본문 바로가기

IT/jpa

jpa는 아닌 mybatis의 foreach 사용법

select *

from table

where 1=1

and sequence in (1, 2, 3, … ,  n)


이런 쿼리를 나타내고 싶을 때


mybatis에서 foreach문을 쓰면 된다

그러면 list로 넘긴 변수를 받아서 쓸 수 있게 됨!


예제를 보자 !


public class TestDomain {

   
private String key;
    private long value;

getter, setter..

}


이라는 클래스를 만들고 


service 단에서


List<TestDomain> list = new ArrayList<>();

TestDomain domain1 = new TestDomain();
domain1.setKey("sequence");
domain1.setValue(1);

list.add(0, domain1);

TestDomain domain2 = new TestDomain();
domain2.setKey("sequence");
domain2.setValue(2);

list.add(1, domain2);

TestDomain domain3 = new TestDomain();
domain3.setKey("sequence");
domain3.setValue(3);

list.add(2, domain3);



List<TestDomain> result = null;


result = mapper.getData(list);


이렇게 mapper에 list를 넘긴다


그러면 mapper.java에서는


public List<TestDomain> getData(List list);

이렇게 받고 ?


마지막 mapper.xml에서?



<select id="getData" parameterType="java.util.List" resultType="com.test.mybatis.foreach.TestDomain>

select sequence, value
from table
where 1=1
and
sequence in
<foreach collection="list" item="item" separator=" , " open="(" close=")">
#{item.value}
</foreach>


</select>


foreach collection에 파라미터로 넘긴 변수의 이름을 지정

item은 내부적으로 쓰일 이름 

separator는 구분자, 기본적으로 쿼리에서 in의 구분자는 ‘,’ 을 사용

open close는 ()



최종 실행되는 쿼리는?


select sequence, value
from table
where 1=1
and sequence in (1, 2, 3)

'IT > jpa' 카테고리의 다른 글

JPA proxy  (0) 2020.02.03
springboot + gradle + jpa + oracle 설정  (1) 2020.01.14