///// 기본환경 정보 /////////////////////////////
1. iBatis 2.3.4
2. JSP3.0
3. Tomcat 7.0
4. Oracle 10g HR 계정의 sample table
///// 예제 따라하기 ////////////////////////
첨부된 war파일을 import 하시거나 압축을 해제한 후
아래의 순서대로 따라하시면 됩니다 ^^
1. log4j.properties src폴더에 복사한다.
2. db.properties 생성하여 SqlMapConfig.xml에서 이용할 설정 정보를 입력한다.
3. SqlMapConfig.xml에 전체옵션 및 트랜잭션 메니저를 설정한다.
4. Day1.xml 사용될 쿼리를 매핑한다.
5. log4j 사용을 위한 LogLoader.java 파일을 생성한다.
6. SqlMapConfig.xml파일을 로딩할 IBatisSettingLoader.java 파일을 생성한다.
7. 검색결과를 관리해주는 IBatisManager.java 파일을 생성한다.
8. Day1Dao.java 파일을 생성한다.
9. day1.jsp를 생성 후 Day1Dao.java 객체를 생성하여 샘플데이터를 출력한다.
샘플데이터 리스트는 jstl을 이용하여 출력한다.
///// 소스구조 및 결과화면 /////////////////
///////////////////////////////////////////////////////////////////////////////
1. log4j.properties src폴더에 복사한다.
log4j 설정은 패스~~ 첨부파일을 참조하시고....
///////////////////////////////////////////////////////////////////////////////
2. db.properties 생성하여 SqlMapConfig.xml에서 이용할 설정 정보를 입력한다.
driver = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@127.0.0.1:1521:ORCL
user = hr
pwd = hr
///////////////////////////////////////////////////////////////////////////////
3. SqlMapConfig.xml에 전체옵션 및 트랜잭션 메니저를 설정한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- properties파일 경로 설정 -->
<properties resource="db.properties" />
<!-- 전체 옵션의 설절 -->
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxTransactions="8"
maxSessions="64"
maxRequests="128"
useStatementNamespaces="true"
/>
<typeAlias type="common.value.DataMap" alias="dmap" />
<typeHandler callback="com.ibatis.sqlmap.engine.type.SqlTimestampTypeHandler"
javaType="java.util.Date" />
<!-- 트랜잭션 매니저 설정 -->
<transactionManager type="JDBC" commitRequired="true">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${user}"/>
<property name="JDBC.Password" value="${pwd}"/>
</dataSource>
</transactionManager>
<sqlMap resource="query/exam/Day1.xml" /> <!-- 예제1 -->
</sqlMapConfig>
///////////////////////////////////////////////////////////////////////////////
4. Day1.xml 사용될 쿼리를 매핑한다.
동적인 where절의 생성
파라미터로 넘어온 맵의 키값중 job_id 가 존재하면 where조건절을 생성하고
그렇지 않으면 무시한다.
<?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.Day1">
<!-- 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>
</sqlMap>
///////////////////////////////////////////////////////////////////////////////
5. log4j 사용을 위한 LogLoader.java 파일을 생성한다.
///////////////////////////////////////////////////////////////////////////////
6. SqlMapConfig.xml파일을 로딩할 IBatisSettingLoader.java 파일을 생성한다.
///////////////////////////////////////////////////////////////////////////////
7. 검색결과를 관리해주는 IBatisManager.java 파일을 생성한다.
package common.db;
import java.util.ArrayList;
import java.util.HashMap;
import com.ibatis.sqlmap.client.SqlMapClient;
import common.util.LogLoader;
/**
* iBatis 컨트롤 메니저
* @author 조한중(hanjoongcho@gmail.com)
* @version 1.0
*/
public class IBatisManager {
SqlMapClient sqlMap;
public IBatisManager() {
sqlMap = IBatisSettingLoader.getSqlMapClient();
}
/**
* HashMap 형태의 파라미터를 받아 리스트를 반환함
* @param queryMap
* @param param
* @return
*/
public ArrayList<HashMap<String, String>> selectList(String queryMap,HashMap<String,
String> param){
ArrayList<HashMap<String, String>> returnlist = new ArrayList<HashMap<String,
String>>();
try{
//쿼리맵을 출력한다
LogLoader.getLogger().info("\n[SELECT_LIST : "+queryMap+"]");
//쿼리시작 시간
long startTime = System.currentTimeMillis();
ArrayList list;
if(param==null){
list = (ArrayList)sqlMap.queryForList(queryMap);
}else{
list = (ArrayList)sqlMap.queryForList(queryMap, param);
}
//쿼리 리턴시간
LogLoader.getLogger().info("\n 수행시간 : " +(System.currentTimeMillis()-startTime) +"
ms ");
LogLoader.getLogger().info("\n 선택된 로우의 수 : " +list.size());
if(list!=null){
int size = list.size();
for(int i=0;i<size;i++){
returnlist.add((HashMap)list.get(i));
}
}
}catch (Exception e){
LogLoader.getLogger().error(e.toString());
}
return returnlist;
}
}
///////////////////////////////////////////////////////////////////////////////
8. Day1Dao.java 파일을 생성한다.
///////////////////////////////////////////////////////////////////////////////
9. day1.jsp를 생성 후 Day1Dao.java 객체를 생성하여 샘플데이터를 출력한다.
샘플데이터 리스트는 jstl을 이용하여 출력한다.
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="exam.day1.dao.Day1Dao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String job_id = StringUtil.nullToEmpty(request.getParameter("job_id"));
Day1Dao dao = new Day1Dao();
ArrayList<HashMap<String, String>> list = null;
ArrayList<HashMap<String, String>> jobIdList = dao.getJobId(); //선택옵션 생성
if("".equals(job_id)){ //검색 키워드가 없을경우
list = dao.getJobs(null);
}else{ //검색 키워드가 있을경우
HashMap<String,String> map = new HashMap<String,String>();
map.put("job_id",job_id);
list = dao.getJobs(map);
}
%>
<c:set var="job_id" value="<%=job_id%>"></c:set>
<!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>DAY - 1</title>
<script type="text/javascript">
function searchGo() {
var job_id = document.getElementById('job_id').value;
location.href = 'day1.jsp?job_id=' + job_id;
}
</script>
</head>
<body>
<div>
<select onchange="searchGo();" id="job_id" name="job_id">
<option value="">전체조회</option>
<c:forEach var="jobIdList" items="<%=jobIdList%>">
<option value="${jobIdList.JOB_ID}" <c:if test = "${jobIdList.JOB_ID == job_id}"> selected="selected" </c:if> >${jobIdList.JOB_ID}</option>
</c:forEach>
</select>
기본 동적쿼리[셀렉트박스를 선택해서 파라미터가 있으면 where 조건절을 생성함]
<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>
</body>
</html>