728x90
반응형

출처 : http://micropilot.tistory.com/category/iBATIS/iBATIS%20parameterClass

 

EMP 테이블에서 조건 검색을 하려면 SELECT * from EMP where EMPNO between ? AND ? 과 같은 문장을 실행할 경우가 있다. 파라미터가 2개 이상이 있는 경우에는 parameterClass="int" 만으로는 안되고 별도의 클래스를 정의하고 2개의 파라미터를 변수로 선언해 주어야 한다. 그리고 변수의 이름과 iBATIS의 맵파일에 등록되는 SQL 문장의 파라미터는 #변수명1#  #변수명2#와 같이 변수명과 파라미터이름이 일치해야 한다.

EmpnoRange.java (SQL 문장으로 전달될 파라미터 2개를 포함하는 빈 클래스 )

package test;

public class EmpnoRange {
 private int from;
 private int to;
 
 public EmpnoRange(int from, int to) {
  this.from = from;
  this.to = to;
 }
 
 public int getFrom() {
  return from;
 }
 public void setFrom(int from) {
  this.from = from;
 }
 public int getTo() {
  return to;
 }
 public void setTo(int to) {
  this.to = to;
 }
}

EMP.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="EMP">

  <!-- Use type aliases to avoid typing the full classname every time. -->

  <typeAlias alias="EMP" type="test.EMP"/>
  <typeAlias alias="EmpnoRange" type="test.EmpnoRange"/> 

  <!-- Result maps describe the mapping between the columns returned
       from a query, and the class properties.  A result map isn't
       necessary if the columns (or aliases) match to the properties
       exactly. -->

  <resultMap id="EMPResult" class="EMP">
    <result property="empno" column="EMPNO"/>
    <result property="ename" column="ENAME"/>
    <result property="job" column="JOB"/>
    <result property="mgr" column="MGR"/>
    <result property="hiredate" column="HIREDATE"/>
    <result property="sal" column="SAL"/>
    <result property="comm" column="COMM"/>
    <result property="deptno" column="DEPTNO"/>
  </resultMap>
  <!-- Select with no parameters using the result map for Account class. -->

  <select id="selectAllEmp" resultMap="EMPResult">
    <!--
    select * from EMP
    모든 컬럼이 null 이 아닌 경우에는 위의 Query 가 문제 없지만, 컬럼에 null이 들어 있다면...
    매핑과정에서 net.sf.cglib.beans.BulkBeanException 예외발생하므로 아래처럼 하면....-->

  SELECT
      EMPNO,
      ENAME,
      JOB,
      COALESCE(MGR, 0) as MGR,
      HIREDATE,
      SAL,
      COALESCE(COMM, 0) as COMM,
      DEPTNO
   FROM EMP
  </select>


<!-- Use primitive wrapper type (e.g. Integer) as parameter and allow results to
be auto-mapped results to Person object (JavaBean) properties. A simpler select example without the result map.  Note the aliases to match the properties of the target result class. -->

<select id="getEmp" parameterClass="int" resultClass="EMP">
   SELECT
      EMPNO as empno,
      ENAME as ename,
      JOB as job,
      COALESCE(MGR, 0) as mgr,<!--null 일경우 0으로 대치-->
      HIREDATE as hiredate,
      SAL as sal,
      COALESCE(COMM, 0) as comm,
      DEPTNO as deptno
      FROM EMP
   WHERE EMPNO = #value#
</select>
 
<select id="selectEmpByEmpnoRange" parameterClass="EmpnoRange" resultClass="EMP">
   SELECT
      EMPNO as empno,
      ENAME as ename,
      JOB as job,
      COALESCE(MGR, 0) as mgr,<!--null 일경우 0으로 대치-->
      HIREDATE as hiredate,
      SAL as sal,
      COALESCE(COMM, 0) as comm,
      DEPTNO as deptno
      FROM EMP
  WHERE EMPNO BETWEEN #from# AND #to#
</select>
</sqlMap>


EmpServlet.java

import java.io.*;
import javax.servlet.http.*;
import test.MyAppSqlConfig;
import test.EMP;
import test.EmpnoRange;
import com.ibatis.sqlmap.client.SqlMapClient;

 public class EmpServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException  {
  PrintWriter out = response.getWriter();
  SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
  try{
  /*
   Integer empno = new Integer(7839);
   EMP emp = (EMP) sqlMap.queryForObject ("getEmp", empno);
   out.print("EMPNO(7839)<hr>");
   out.println(emp.getEmpno()+" "+ emp.getEname()+" "+emp.getJob()+" "+emp.getMgr()+" "+emp.getHiredate()+" "+emp.getSal()+" "+emp.getComm()+" "+emp.getDeptno());
  */

   EmpnoRange range = new EmpnoRange(7369, 7788);
   java.util.List list = sqlMap.queryForList("selectEmpByEmpnoRange", range);

  
   for(int i=0;i<list.size();i++) {
    EMP emp = (EMP) list.get(i);
    out.println(emp.getEmpno()+" "+ emp.getEname()+" "+emp.getJob()+" "+emp.getMgr()+" "+emp.getHiredate()+" "+emp.getSal()+" "+emp.getComm()+" "+emp.getDeptno());
    out.println("<br>");
   }
  }catch(Exception e){
   out.println(e);
  }     
 }
 }

실행결과

728x90
반응형

'SQL > IBATIS' 카테고리의 다른 글

ibatis 에서 iterate 사용 (insert select, union all)  (0) 2014.02.12
[본문스크랩] IBatis개발자 가이드  (0) 2014.02.12
Ibatis 시작하기 -1-  (0) 2014.02.12
IBatis 시작하기 2  (0) 2014.02.12
Ibatis 트렌젝션 사용시 유의점..  (0) 2014.02.12
DynamicQuery 사용법  (0) 2014.02.12
iBatis LIKE 구문 쓸때....-_______-.....  (0) 2014.02.12
ibatis like 사용법  (0) 2014.02.12
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,