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 |