MyBatis의 foreach 문구 상세 정보

4022 단어 mybatisforeach
foreach는 주로 구축 in 조건에 사용되며, SQL 문장에서 하나의 집합을 교체할 수 있다.foreach 요소의 속성은 주로 item, index,collection,open,separator,close가 있습니다.item은 집합 중의 모든 요소가 교체될 때의 별명을 나타낸다. index는 하나의 이름을 지정한다. 교체 과정에서 매번 교체되는 위치를 나타낸다. open은 이 문장이 무엇으로 시작되는지,separator는 매번 교체될 때 어떤 기호를 구분자로 하는지,close는 무엇으로 끝날지 나타낸다. foreach를 사용할 때 가장 관건적이고 오류가 발생하기 쉬운 것은collection 속성이다.이 속성은 반드시 지정해야 하지만, 서로 다른 상황에서 이 속성의 값은 다르다. 주로 다음과 같은 세 가지 상황이 있다.
1. 매개 변수가 단일 매개 변수이고 매개 변수 형식이 List일 때,collection 속성 값은list
2. 단일 매개 변수와 매개 변수 형식이array 그룹일 때collection의 속성 값은array
3. 전송된 매개 변수가 여러 개일 때 우리는 그것들을 하나의 맵으로 봉인해야 한다. 물론 단일 매개 변수도 맵으로 봉인할 수 있다. 실제로 매개 변수를 전송할 때breast 안에서도 맵으로 봉인한다. 맵의 키는 매개 변수 이름이다. 그래서 이때 컬렉션 속성 값은 전송된 List나array 대상이 자신이 봉인된 맵에 있는 키이다.
다음은 상기 세 가지 상황의 예시 코드를 살펴보겠습니다.
1. 단일 매개변수 List 유형:

<select id="dynamicForeachTest" resultType="Blog">
select * from t_blog where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
상술한 컬렉션의 값은list입니다. 대응하는 Mapper는 이렇습니다.

public List<Blog> dynamicForeachTest(List<Integer> ids);
테스트 코드:

@Test
public void dynamicForeachTest() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(3);
ids.add(6);
List<Blog> blogs = blogMapper.dynamicForeachTest(ids);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}
2. 단일 매개변수 array 배열의 유형:

<select id="dynamicForeach2Test" resultType="Blog">
select * from t_blog where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
상기 collection은 array로 대응하는 Mapper 코드입니다.

public List<Blog> dynamicForeach2Test(int[] ids);
테스트 코드:

@Test
public void dynamicForeach2Test() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
int[] ids = new int[] {1,3,6,9};
List<Blog> blogs = blogMapper.dynamicForeach2Test(ids);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}
3. 스스로 매개 변수를 맵 형식으로 봉인

<select id="dynamicForeach3Test" resultType="Blog">
select * from t_blog where title like "%"#{title}"%" and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
상기 collection의 값은 ids로 전송된 매개 변수 맵의 키이며 대응하는 Mapper 코드입니다.

public List<Blog> dynamicForeach3Test(Map<String, Object> params);
테스트 코드:

@Test
public void dynamicForeach3Test() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
final List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(6);
ids.add(7);
ids.add(9);
Map<String, Object> params = new HashMap<String, Object>();
params.put("ids", ids);
params.put("title", " ");
List<Blog> blogs = blogMapper.dynamicForeach3Test(params);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}
상기 서술한 것은 편집자가 여러분께 소개한 My Batis의 foreach 문장에 대한 상세한 지식입니다. 여러분께 도움이 되기를 바랍니다!

좋은 웹페이지 즐겨찾기