iBatis의 iterate요소를 이용한 동적 쿼리 생성 예제 입니다.
///// 기본환경 정보 /////////////////////////////
1. iBatis 2.3.4
2. JSP3.0
3. Tomcat 7.0
4. Oracle 10g HR 계정의 sample table
아래 그림과 같이 체크박스를 선택해서 JOB_TITLE을 선택하면
HR계정의 JOBS 테이블에 있는 해당 데이터 정보를 출력합니다.
주요소스 설명
/////// iterate.jsp ///////////////////////////////////////////////
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="exam.day2.dao.Day2Dao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
Day2Dao dao = new Day2Dao();
ArrayList<HashMap<String, String>> jobIdList = dao.getJobId(); //선택옵션 생성
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
// 체크박스 검색키워드 값을 배열에 담아 넘겨줌
String[] checkIds = request.getParameterValues("jobId");
if(checkIds != null){ //체크박스가 하나 이상 선택될경우
list = dao.getJobs(checkIds);
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>동적쿼리 iterate</title>
</head>
<body>
<!-- 체크 영역 -->
<div style="float: left;">
<table border="1">
<colgroup>
<col width="20%">
<col width="40%">
<col width="20%">
<col width="20%">
</colgroup>
<thead>
<tr>
<th>JOB_ID</th><th>JOB_TITLE</th><th>MIN_SALARY</th><th>MAX_SALARY</th>
</tr>
</thead>
<tbody>
<!-- jstl을 이용하여 list에 담겨있는 Map의 value값을 호출 -->
<c:forEach var="list" items="<%=list%>">
<tr>
<td>${list.JOB_ID}</td>
<td>${list.JOB_TITLE}</td>
<td>${list.MIN_SALARY}</td>
<td>${list.MAX_SALARY}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<!-- 선택 영역 -->
<div style="float: right;">
<form action="" method="get">
<c:forEach var="jobIdList" items="<%=jobIdList%>" >
<input type="checkbox" name="jobId" value="${jobIdList.JOB_ID}"
/>${jobIdList.JOB_TITLE} <br />
</c:forEach>
<input type="submit" value="검색" />
</form>
</div>
</body>
</html>
/////// Day2Dao.java ///////////////////////////////////////////////
package exam.day2.dao;
import java.util.ArrayList;
import java.util.HashMap;
import common.db.IBatisManager;
public class Day2Dao {
IBatisManager manager = new IBatisManager();
public Day2Dao() {
// TODO Auto-generated constructor stub
}
/**
* JOBS 테이블의 정보를 반환(String[] 형태의 키값을 받아서 필터링함)
* @param map
* @return
*/
public ArrayList<HashMap<String, String>> getJobs(String[] jobIdArr){
ArrayList<HashMap<String, String>> list = null;
HashMap<String, Object> map = new HashMap<String, Object>();
//넘어온 배열을 맵에 담아 쿼리 실행
map.put("jobIdArr",jobIdArr);
list = manager.selectList("query.exam.Day2.getCheckJobs", map);
return list;
}
/**
* JOB_ID를 모두 반환함
* @return
*/
public ArrayList<HashMap<String, String>> getJobId(){
ArrayList<HashMap<String, String>> list = null;
HashMap<String, Object> map = null;
list = manager.selectList("query.exam.Day2.getJobs", map);
return list;
}
}
/////// Day2.xml ///////////////////////////////////////////////
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="query.exam.Day2">
<!-- JOBS 테이블의 모든 로우정보를 받아옴 -->
<select id="getJobs" resultClass="java.util.HashMap">
SELECT * FROM JOBS
<dynamic prepend="where">
<isNotNull property="job_id">
JOB_ID = #job_id#
</isNotNull>
</dynamic>
</select>
<!--
배열에 담긴 정보를 conjunction 구분자',' 를 이용하여 출력
IN 구문을 동적으로 생성하며 생성된 구문은 open,close 속성에 의하여
괄호로 감싸진다.
-->
<!-- Check된 JOB_ID와 일치하는 정보를 반환 -->
<select id="getCheckJobs" resultClass="java.util.HashMap"
parameterClass="java.util.HashMap">
SELECT * FROM JOBS
<isNotNull prepend="WHERE JOB_ID IN">
<iterate property="jobIdArr" open="(" close=")" conjunction=",">
#jobIdArr[]#
</iterate>
</isNotNull>
</select>
</sqlMap>
'SQL > IBATIS' 카테고리의 다른 글
ibatis multiple update (0) | 2014.02.12 |
---|---|
ibatis $ # 차이 (0) | 2014.02.12 |
ibatis iterate ( map , list , array ) (0) | 2014.02.12 |
iBatis 예제 - 3 (iBatis 프로시저(procedure)를 이용한 데이터 insert) (0) | 2014.02.12 |
iBatis 예제 - 1 (iBatis 기본설정 및 데이터 출력) (0) | 2014.02.12 |
iBatis기본 설정 및 사용방법(회원가입 및 수정 탈퇴 예제) (0) | 2014.02.12 |
iBatis 동적인 SQL 항목별 요소 (0) | 2014.02.12 |
iBatis와 DBCP 바로알기 (0) | 2014.02.12 |