Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

유령노트

mybatis와 ibatis 반복문 비교하기(foreach vs iterate) 본문

# Dev/JSP

mybatis와 ibatis 반복문 비교하기(foreach vs iterate)

유령손 2017. 9. 20. 10:22
자료 가져온곳 : http://hellogk.tistory.com/99

 

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 인터페이스 추가 코드입니다.

 
1
public void list(Map<String, Object> hmap) throws SQLException;
cs
 

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