728x90
반응형

기존에 ibatis2.5로 구현했던 sample 예제를 mybatis3.1버전을 적용하여 변경한 예제입니다.

이번포스팅에서는 mybatis3.1과 JSP 3.0버전에 대한 간단한 설정및 사용법에 대해 포스팅 할 예정이며

차후에는 mybatis3.1과 spring3.1버전 / mybatis-spring1.1과 spring3.1버전 설정법에 대해 포스팅

하도록 하겠습니다.


해당소스는 naver  svn에서 checkout 가능하며 상세설명은 PDF로 별도 첨부합니다^^

https://dev.naver.com/svn/samplesource/branches/mybatis3.1_originjsp

저장소는 모두공개로 설정되어 있습니다.

계정을 물어보면 본인의 네이버아이디와 개발자센터에서 추가로 등록한 저장소 비밀번호를 이용하시면 됩니다^^

네이버 svn사용법은 아래의 링크에서 확인하세요

http://sharepoint.egloos.com/2963559



2.    Mybatis3.1 JSP3.0 연동하기


2-1.  mybatis참고 URL 및 라이브러리 다운로드

아래의 url에서 원하는 버전의 라이브러리를 다운받아 압축을 해제한다.

http://code.google.com/p/mybatis/downloads/list?can=1


2-2.  예제 소스 다운로드

블러그 첨부파일 - http://blog.naver.com/korn123?Redirect=Log&logNo=30141764987

svn repository – https://dev.naver.com/svn/samplesource/branches/mybatis3.1_originjsp


 

2-3.  예제소스 구조

이번 예제는 mybatis3.1 jsp3.0을 연동하는 예제로 웹프레임웍을 이용하지 않는 간편한 예제로

소스파일의 구조는 아래와 같다.


  

2-4.  예제소스 설명

2-4-1. 개요

기본컨트롤 및 뷰 구현은 JSP에서 모두 처리되며 데이터베이스와 연동하는 모델은 java코드에서

처리한다.

SqlSessionFactoryManager.java클래스에서 SqlSessionFactory인스턴스를 생성하며

이렇게 생성된 인스턴스를 Day1Dao.java / Day2Dao.java에서 취득하여 쿼리를 수행한다.

예제코드는 파라미터 유무에 따른 where연산과 파라미터 수량에 따른 in연산을 수행하는

가지 형태의 코드로 구성되어 있다.

Database Oracle XE 기본적으로 생성되어 있는 HR스키마를 이용한다.

 

2-4-2.  예제 실행 화면

<메인화면>



<where조건절 없이 디폴트값으로 모두 선택된 화면>




<콤보박스 선택값으로 where조건절 생성화면>


 

  

<체크박스를 선택하기 전 기본화면>

 

 

<체크박스 선택 후 해당 파라미터 집합으로 in연산을 수행한 화면>




2-4-3. 주요 설정파일 및 코드 설명

2-4-3-1.          db.properties

SqlMapConfig.xml에서 datasource설정시 사용되는 DB Connection정보를 관리한다.

#Oracle

#driver = oracle.jdbc.driver.OracleDriver

driver = core.log.jdbc.driver.OracleDriver

url    = jdbc:oracle:thin:@127.0.0.1:1521:XE

user   = hr

pwd    = hr


 

2-4-3-2.          SqlSessionFactoryManager.java

SqlMapConfig.xml 파일을 로딩하여 SqlSessionFactory 인스터스를 싱글톤으로 생성한다.

 

/**

 * SqlSessionFactory 인스턴스를 싱글턴으로 반환함

 * @author hanjoong

 *

 */

public class SqlSessionFactoryManager {

 

        private static Logger log = Logger.getLogger(SqlSessionFactoryManager.class);

        private static final SqlSessionFactory sqlMapper;

       

        static{

               String resource = "query/SqlMapConfig.xml";

               Reader reader = null;

               try {

                       reader = Resources.getResourceAsReader(resource);

               } catch (IOException e) {

                       log.debug("초기화 에러");

               }

               sqlMapper = new SqlSessionFactoryBuilder().build(reader);

        }

       

              

        /**

         *

         * @return SqlSessionFactory 인스턴스를 반환

         */

        public static SqlSessionFactory getSqlSessionFactory() {

               return sqlMapper;  

        }

 

       

}

 

2-4-3-3.          SqlMapConfig.xml

Mybatis 사용을 위한 설정관리 파일로 datasourcce정보 및 mapper파일 경로를 지정한다.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

        <properties resource="db.properties">

        </properties>

        <environments default="development" >

               <environment id="development" >

                       <transactionManager type="JDBC" />

                       <dataSource type="POOLED" >

                              <property name="driver" value="${driver}" />

                              <property name="url" value="${url}" />

                              <property name="username" value="${user}" />

                              <property name="password" value="${pwd}" />

                       </dataSource>

               </environment>

        </environments>

        <mappers>

               <mapper resource="query/exam/Day1.xml" />

               <mapper resource="query/exam/Day2.xml" />

        </mappers>

</configuration>

 


 

2-4-3-4.          Day1.xml

실질적인 쿼리를 수행하기 위한 Mapper설정 파일

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="query.exam.Day1">

        <resultMap id="hashmap" type="java.util.HashMap">

        </resultMap>

       

        <!-- JOBS 테이블의 모든 로우정보를 받아옴 -->

        <select id="getJobs" parameterType="int" resultMap="hashmap">

               SELECT * FROM JOBS

               <where>

                   <if test="job_id != null">

                        JOB_ID = #{job_id}

                   </if>

               </where>

        </select>

       

</mapper>

 

2-4-3-5.          Day2.xml

실질적인 쿼리를 수행하기 위한 Mapper설정 파일

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="query.exam.Day2">

        <resultMap id="hashmap" type="java.util.HashMap">

        </resultMap>

       

    <!-- JOBS 테이블의 모든 로우정보를 받아옴 -->

        <select id="getJobs" parameterType="int" resultMap="hashmap">

               SELECT * FROM JOBS

               <where>

                   <if test="job_id != null">

                        JOB_ID = #{job_id}

                   </if>

               </where>

        </select>

    <!-- Check JOB_ID 일치하는 정보를 반환 -->

        <select id="getCheckJobs" resultMap="hashmap"

                                   parameterType = "java.util.HashMap">

           SELECT * FROM JOBS

              <where>

               <if test="jobIdArr != null">

                  <foreach collection="jobIdArr" open="JOB_ID IN (" close=")"

                         separator="," item="jobIdArr">

                       #{jobIdArr}

                   </foreach>

               </if>

</where>

        </select>     

</mapper>

 


 

2-4-3-6.          Day1Dao

JSP에서 넘겨주는 정보를 mapper와 연결한다.

public class Day1Dao {

       

        SqlSessionFactory sqlMapper = SqlSessionFactoryManager.getSqlSessionFactory();

       

        public Day1Dao() {

               // TODO Auto-generated constructor stub

        }

       

        /**

         * JOBS 테이블의 정보를 반환(검색키워드가 없으면 모두 반환)

         * @param map

         * @return

         */

        @SuppressWarnings({ "rawtypes", "unchecked" })

        public ArrayList<HashMap<String, String>>

 getJobs(HashMap<String, Object> map){

               ArrayList<HashMap<String, String>> list = null;

               list = (ArrayList)sqlMapper.openSession().

selectList("query.exam.Day1.getJobs",map);

               return list;

        }

       

        /**

         * JOB_ID 모두 반환함

         * @return

         */

        @SuppressWarnings({ "rawtypes", "unchecked" })

        public ArrayList<HashMap<String, String>> getJobId(){

               ArrayList<HashMap<String, String>> list = null;

               HashMap<String, Object> map = null;

               list = (ArrayList)sqlMapper.openSession().

                                selectList("query.exam.Day1.getJobs",map);

               return list;

        }

       

}


 

2-4-3-7.          Day2Dao

JSP에서 넘겨주는 정보를 mapper와 연결한다.

 

public class Day2Dao {

       

        SqlSessionFactory sqlMapper = SqlSessionFactoryManager.getSqlSessionFactory();

       

        public Day2Dao() {

               // TODO Auto-generated constructor stub

        }

       

        /**

         * JOBS 테이블의 정보를 반환(String[] 형태의 키값을 받아서 필터링함)

         * @param map

         * @return

         */

        @SuppressWarnings({ "rawtypes", "unchecked" })

        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 = (ArrayList)sqlMapper.openSession().

selectList("query.exam.Day2.getCheckJobs", map);

               return list;

        }

       

        /**

         * JOB_ID 모두 반환함

         * @return

         */

        @SuppressWarnings({ "rawtypes", "unchecked" })

        public ArrayList<HashMap<String, String>> getJobId(){

               ArrayList<HashMap<String, String>> list = null;

               HashMap<String, Object> map = null;

               list = (ArrayList)sqlMapper.openSession().

selectList("query.exam.Day2.getJobs",map);

               return list;

        }

}


 

 

2-4-3-8.          day1.jsp

사용자의 요청을 service로직에 전달하고 jstl el을 이용하여 반환된 값을 보여준다.

<%@page import="common.util.StringUtil"%>

<%@ 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,Object> map = new HashMap<String,Object>();

          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>

2-4-3-9.          Day2.jsp

사용자의 요청을 service로직에 전달하고 jstl el을 이용하여 반환된 값을 보여준다.

<%@ 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>

728x90
반응형
블로그 이미지

nineDeveloper

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

,