유령노트
mybatis와 ibatis 반복문 비교하기(foreach vs iterate) 본문
Mybatis와 ibatis의 반복문에 대해서 알아보도록 하겠습니다.
보통 SQL 쿼리에서 IN절에 사용되는 방법입니다.
기본적으로 한 종류의 타입의 리스트 객체를 이용합니다.
Mybatis와 ibatis 태그를 나누어서 사용방법을 포스팅하겠습니다.
기본 ibatis 연동법에서 POM.XML의 IBATIS 관련 DEPENDENCY 설정부분을 빼고
포스팅을 하였습니다.
2014/11/17 - [개발에필요한연동법/스프링연동] - Spring3 + ibatis(아이바티스) 연동해보고 쿼리결과값 콘솔에 출력해보기
pom.xml에 추가해주실 DEPENDENCY 부분은 다음과 같습니다.
IBATIS POM.XML DEPENDENCY 추가코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring-framework.version}</version>
</dependency>
|
cs |
샘플테이블은 MySQL의 information_schema DB의 'TABLES' 테이블 기준으로 설명드리도록 하겠습니다.
※ 해당 샘플을 따라해보시려면 application-config.xml파일내에 존재하는
datasource태그의 url 값의 db명을 "information_schema"로 변경하시면 되겠습니다.
컨트롤러 코드 먼저 작성해보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@RequestMapping("/list")
public void list(){
try {
Map<String, Object> hmap = new HashMap<String, Object>();
ArrayList<String> dbList = new ArrayList<String>();
dbList.add("mysql");
dbList.add("test");
hmap.put("dbList", dbList);
studyDao.list(hmap);
} catch (Exception e) {
e.printStackTrace();
}
}
|
cs |
Dao 인터페이스 추가 코드입니다.
DaoImpl 클래스 코드입니다.(Mybatis)
1
2
3
4
|
@Override
public void list(Map<String, Object> hmap) throws SQLException {
query.selectList("query.list",hmap);
}
|
cs |
DaoImpl클래스 코드입니다.(ibatis)
1
2
3
4
|
@Override
public void list(Map<String, Object> hmap) throws SQLException {
query.queryForList("query.list",hmap);
}
|
cs |
위코드를 보시면 DaoImpl에서 별도로 return 을 해주지 않았습니다.
그 이유는 단순하게 IN절내에 정상적인 Parameter값들이 들어가는지
쿼리로그로 확인을 하기위하여 별도의 return 타입을 작성하지 않았습니다.
마지막으로 Mybatis(foreach 태그)와 IBATIS(iterate 태그) 별 쿼리 XML 태그는 다음과 같습니다.
Mybatis foreach 태그코드
1
2
3
4
5
6
7
8
|
<select id="list" parameterType="java.util.Map" resultType="java.util.Map">
SELECT *
FROM TABLES
WHERE TABLE_SCHEMA IN
<foreach item="item" index="index" collection="dbList" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
|
cs |
ibatis iterate 태그코드
1 2 3 4 5 6 7 | <select id="list" parameterClass="java.util.Map" resultClass="com.spring.study.vo.ListVo"> SELECT table_name FROM TABLES WHERE TABLE_SCHEMA IN <iterate property="dbList" open="(" close=")" conjunction=","> #dbList[]# </iterate> </select> | cs |
mybatis의 경우는 collection에 넘겨준 단일타입의 List객체명을 작성해주시면 되겠으며
ibatis의 경우는 property에 넘겨준 단일타입 List 객체명을 작성해주시면됩니다.
실행을 해보도록 하겠습니다.
List객체로 넘긴 Parameter가 정상적으로 구분자를 통하여 IN PARAMETER에 넘어왔으면
총 28개의 결과값을 출력한 것을 확인 할 수 있었습니다.
※ ibatis의 경우는 별도의 로그가 출력되지 않을것입니다.
에러가 안나면 정상적으로 쿼리조회가 완료 된것이므로 신경쓰지 않으셔도 되겠습니다.
mybatis처럼 resultClass를 Map타입으로 받아오지 못하는 관계로
임의로 VO 객체를 RESULTCLASS로 받게끔 처리해두었습니다.
자료 가져온곳 : http://hellogk.tistory.com/99
'# Dev > JSP' 카테고리의 다른 글
JSTL 연차별 SELECT BOX 출력 (0) | 2022.05.24 |
---|---|
[펌] iBATIS의 DynamicQuery 사용하기 (0) | 2017.08.31 |
우선 순위 확인하기 (0) | 2017.03.31 |
값 전달하는 방법 (0) | 2017.01.02 |