관리 메뉴

nalaolla

SqlSession + MyBatis + 프로시져 호출하여 우편번호 가져오기 본문

SPRING

SqlSession + MyBatis + 프로시져 호출하여 우편번호 가져오기

날아올라↗↗ 2016. 3. 26. 20:07
728x90
반응형

Spring + SqlSession + MyBatis + 프로시져 호출하여 우편번호 가져오기



우편번호 검색하여 해당 결과리스트 가져오는 단순한 프로세스이다..


혹 까먹을까봐 블로그에 남겨놓기로 하자..


우선 Bean설정부터..

root_context.xml 설정

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"
  5.     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  6.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  7.    
  8.     <!-- Root Context: defines shared resources visible to all other web components -->
  9.    
  10.     <!-- Root Context: defines shared resources visible to all other web components -->
  11.     <bean id="jacksonMessageConverter"
  12.         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
  13.     <bean
  14.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  15.         <property name="messageConverters">
  16.             <list>
  17.                 <ref bean="jacksonMessageConverter" />
  18.             </list>
  19.         </property>
  20.     </bean>
  21.  
  22.     <bean id="multipartResolver"
  23.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  24.         <property name="maxUploadSize" value="-1" />  <!-- -1 이면 크기제한 없음 -->
  25.     </bean>
  26.  
  27.  
  28.     <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  29.         <property name="locations">
  30.             <value>classpath:jdbc/oracle.properties</value>
  31.         </property>
  32.     </bean>
  33.    
  34.     <!--1. pom.xml commons-dbcp.jar -->
  35.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  36.         <property name="driverClassName" value="${jdbc.DRIVER_NAME}" />
  37.         <property name="url" value="${jdbc.URL}" />
  38.         <property name="username" value="${jdbc.USER_ID}" />
  39.         <property name="password" value="${jdbc.USER_PWD}" />
  40.     </bean>
  41.  
  42.     <!-- 3.mybatis -->
  43.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  44.         <property name="dataSource" ref="dataSource" />
  45.         <!-- <property name="mapperLocations" value="classpath:jdbc/sqlMapper_*.xml"
  46.             /> -->
  47.         <property name="mapperLocations">
  48.             <list>
  49.                 <value>classpath:jdbc/sqlMapper_Member.xml</value>
  50.                 <value>classpath:jdbc/sqlMapper_Common.xml</value>
  51.             </list>
  52.         </property>
  53.     </bean>
  54.  
  55.     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  56.         <constructor-arg ref="sqlSessionFactory" />
  57.     </bean>
  58.    
  59.     <!-- transaction 처리 insert, update, delete, etc -->
  60.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  61.         <property name="dataSource" ref="dataSource" />
  62.     </bean>
  63.    
  64.    
  65.     <!-- ////////////////////// 타일즈 관련 설정 //////////////////////// -->
  66.     <!-- 설정파일 지정하기 -->
  67.     <bean id="tilesConfig"
  68.         class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  69.         <property name="definitions">
  70.             <list>
  71.                 <value>/WEB-INF/tiles/tiles_index.xml</value>
  72.                 <value>/WEB-INF/tiles/tiles_sub.xml</value>
  73.                 <value>/WEB-INF/tiles/tiles_template.xml</value>
  74.                
  75.             </list>
  76.         </property>
  77.     </bean>
  78.     <!-- 뷰를 타일즈로 지정하기 -->
  79.     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  80.         <property name="order" value="0" />
  81.         <property name="viewClass"
  82.             value="org.springframework.web.servlet.view.tiles2.TilesView" />
  83.         <property name="viewNames" value=".*" />
  84.     </bean>
  85.    
  86.     <bean id="ServletPath" class="abc.co.kr.member.controller.GetServletPath"></bean>
  87.    
  88.    
  89. </beans>



CommonService.java

  1. package nzin.co.kr.common.model;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.springframework.stereotype.Service;
  6.  
  7. @Service
  8. public interface CommonService {
  9.     public Map<String, Object> zip_list(ZipcodeDTO dto, int page, int pagesize);
  10. }



CommonServiceImpl.java

  1. package nzin.co.kr.common.model;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7.  
  8. @Service
  9. public class CommonServiceImpl implements CommonService {
  10.  
  11.     CommonDAO commonDAO;
  12.  
  13.     public CommonDAO getCommonDAO() {
  14.         return commonDAO;
  15.     }
  16.    
  17.     @Autowired
  18.     public void setCommonDAO(CommonDAO commonDAO) {
  19.         this.commonDAO = commonDAO;
  20.     }
  21.  
  22.     @Override
  23.     public Map<String, Object> zip_list(ZipcodeDTO dto, int page, int pagesize) {
  24.         // TODO Auto-generated method stub
  25.         Map<String, Object> list = commonDAO.zip_list(dto, page, pagesize);
  26.        
  27.         return list;
  28.     }
  29.  
  30. }


CommonDAO.java

  1. package nzin.co.kr.common.model;
  2.  
  3. import java.util.Map;
  4.  
  5. public interface CommonDAO {
  6.    
  7.     public Map<String, Object> zip_list(ZipcodeDTO dto, int page, int pagesize);
  8.    
  9. }


CommonDAOImpl.java

  1. package nzin.co.kr.common.model;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. import org.apache.ibatis.session.SqlSession;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Repository;
  11.  
  12. @Repository
  13. public class CommonDAOImpl implements CommonDAO {
  14.  
  15.     SqlSession sqlSession;
  16.  
  17.     public SqlSession getSqlSession() {
  18.         return sqlSession;
  19.     }
  20.    
  21.     @Autowired
  22.     public void setSqlSession(SqlSession sqlSession) {
  23.         this.sqlSession = sqlSession;
  24.     }
  25.  
  26.     @Override
  27.     public Map<String, Object> zip_list(ZipcodeDTO dto, int page, int pagesize) {
  28.         // TODO Auto-generated method stub
  29.        
  30.         System.out.println("dao zip_list : " + page);
  31.         System.out.println("dao zip_listsize : " + pagesize);
  32.         System.out.println("dao bname : " + dto.getB_name());
  33.        
  34.         List<ZipcodeDTO> list = new ArrayList<ZipcodeDTO>();
  35.         Map<String, Object> map = new HashMap<String, Object>();
  36.        
  37.         map.put("d_name", dto.getB_name());
  38.         map.put("page"String.valueOf(page));
  39.         map.put("pagesize"String.valueOf(pagesize));
  40.        
  41.         sqlSession.selectOne("zip_select", map);
  42.         list = (List<ZipcodeDTO>) map.get("PLIST1");
  43.        
  44.         map.put("result_list", map.get("PLIST1"));
  45.         map.put("result_cnt", map.get("PLIST2"));
  46.         return map;
  47.     }
  48.    
  49.    
  50. }


sqlMapper_Common.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!DOCTYPE mapper
  4.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  5.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  6.  
  7. <mapper namespace="nzin.co.kr.common.model">
  8.    
  9.     <resultMap id="zipcodeVOMap" type="nzin.co.kr.common.model.ZipcodeDTO">
  10.         <result property="zipcode" column="zipcode"/>
  11.         <result property="sido" column="sido"/>
  12.         <result property="sigungu" column="sigungu"/>
  13.         <result property="myon" column="myon"/>
  14.         <result property="b_name" column="b_name"/>
  15.         <result property="road_name" column="road_name"/>
  16.         <result property="building_no" column="building_no"/>
  17.         <result property="building_no_sub" column="building_no_sub"/>
  18.         <result property="sigungu_building_name" column="sigungu_building_name"/>
  19.     </resultMap>
  20.    
  21.     <select id="zip_select" statementType="CALLABLE" resultType="nzin.co.kr.common.model.ZipcodeDTO" parameterType="hashMap">
  22.         {CALL
  23.             UP_ZIPCODE_SEARCH(
  24.                   #{d_name, mode=IN }
  25.                   ,#{PLIST1, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=zipcodeVOMap}
  26.                   ,#{PLIST2, mode=OUT, jdbcType=INTEGER }
  27.                   ,#{page, mode=IN }
  28.                   ,#{pagesize, mode=IN }
  29.             )
  30.        }
  31.     </select>
  32.    
  33. </mapper>



CommonController.java


  1. package nzin.co.kr.common.controller;
  2.  
  3. import java.util.Map;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6.  
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.ui.Model;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14.  
  15. import nzin.co.kr.common.model.CommonService;
  16. import nzin.co.kr.common.model.ZipcodeDTO;
  17.  
  18. /**
  19. * Handles requests for the application home page.
  20. */
  21. @Controller
  22. public class CommonController {
  23.    
  24.     private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
  25.    
  26.     /**
  27.      * Simply selects the home view to render by returning its name.
  28.      */
  29.    
  30.     CommonService cService;
  31.    
  32.    
  33.    
  34.     public CommonService getcService() {
  35.         return cService;
  36.     }
  37.  
  38.     @Autowired
  39.     public void setcService(CommonService cService) {
  40.         this.cService = cService;
  41.     }
  42.  
  43.  
  44.     @RequestMapping(value = {"/popup/pop_zipsearch.do"}, method = RequestMethod.GET)
  45.     public String pop_zipsearch(Model model, HttpServletRequest request) {
  46.         logger.info("pop_zipsearch()");
  47.        
  48.        
  49.         return "/popup/pop_zipsearch";
  50.     }
  51.    
  52.    
  53.     @RequestMapping(value = {"/popup/pop_zipsearch_list.do"}, method = RequestMethod.GET)
  54.    
  55.     public String pop_zipsearch_list(Model model, String d_name, String page, String pagesize) {
  56.         logger.info("pop_zipsearch_list()");
  57.        
  58.        
  59.        
  60.         String pages = page;
  61.         String listsize = pagesize;
  62.         String b_name;
  63.         b_name= d_name;
  64.        
  65.         if (pages == null) {
  66.             pages = "1";
  67.         }
  68.  
  69.         if (listsize == null) {
  70.             listsize = "10";
  71.         }
  72.  
  73.         if (b_name != null && b_name != "") {
  74.             ZipcodeDTO dto = new ZipcodeDTO();
  75.  
  76.             dto.setB_name(b_name);
  77.            
  78.             Map<String, Object> result = cService.zip_list(dto, Integer.parseInt(pages)Integer.parseInt(listsize));
  79.            
  80.             //List<ZipcodeDTO> list = dao.list(dto, Integer.parseInt(pages), Integer.parseInt(listsize));
  81.             //System.out.println("size : " + list.size());
  82.             model.addAttribute("ziplist", result.get("result_list"));
  83.            
  84.             if(Integer.parseInt(result.get("result_cnt").toString()) > 0) {
  85.                 model.addAttribute("resultCount", result.get("result_cnt"));
  86.                 PagingNavi pNavi = new PagingNavi(Integer.parseInt(result.get("result_cnt").toString())Integer.parseInt(listsize)10,
  87.                         Integer.parseInt(pages));
  88.                 model.addAttribute("pn", pNavi);
  89.             } else {
  90.                 model.addAttribute("resultCount"0);
  91.             }
  92.            
  93.  
  94.         }
  95.        
  96.         logger.info("pages : " + pages);
  97.         logger.info("listsize : " + listsize);
  98.         logger.info("d_name : " + b_name);
  99.        
  100.        
  101.         return "/popup/pop_zipsearch";
  102.     }
  103.    
  104.    
  105.    
  106. }


PagingNavi.java

  1. package nzin.co.kr.common.controller;
  2.  
  3. public class PagingNavi {
  4.     private int totalRow; // 총 레코드수
  5.     private int totalPage; // 전체페이지
  6.     private int currentPage; // 현재페이지
  7.     private int pageGroup; // 페이지그룹
  8.     private int listSize; // 페이지별 리스트갯수
  9.     private int pageSize; // 페이지갯수..[1][2][3]..일반적으로 10개
  10.     private boolean firstGo;
  11.     private boolean lastGo;
  12.     private boolean nextGo;
  13.     private boolean prevGo;
  14.     private int firstPage;
  15.     private int nextPage;
  16.     private int prevPage;
  17.     private int lastPage;
  18.     private int[] pageNavi;
  19.  
  20.     public PagingNavi(int totalRow, int listSize, int pageSize, int currentPage) {
  21.         // 전체레코드수, 리스트갯수, 페이지갯수, 현재페이지
  22.  
  23.         this.totalRow = totalRow;
  24.         this.listSize = listSize;
  25.         this.pageSize = pageSize;
  26.         this.currentPage = currentPage;
  27.  
  28.         if (currentPage == 0)
  29.             currentPage = 1;
  30.  
  31.         int startNum;
  32.         int endNum;
  33.  
  34.         int mod = totalRow % listSize;
  35.         if (mod > 0) {
  36.             totalPage = (totalRow / listSize) + 1;
  37.         } else {
  38.             totalPage = (totalRow / listSize);
  39.         }
  40.  
  41.         pageGroup = (totalPage / pageSize) + 1// 전체 페이지 그룹 (1~10 : 1그룹, 11~20:2그룹)
  42.         int currentPageGroup = ((currentPage - 1) / pageSize) + 1// 현재 페이지 그룹
  43.         // System.out.println(currentPageGroup);
  44.  
  45.         firstGo = (currentPage <= pageSize) ? false : true// 첫페이지 이동 설정(현재페이지가 1그룹안에 있으면 false)
  46.         prevGo = (currentPageGroup == 1) ? false : true;    // 이전페이지 이동(현재페이지가 1그룹에 있으면 false)
  47.         nextGo = (currentPageGroup == pageGroup) ? false : true// 다음페이지 이동(현재페이지가 마지막 그룹에 속해있으면 false)
  48. //    lastGo = (currentPage >= pageSize && currentPageGroup == pageGroup) ? false : true; // 라스트페이지 이동  설정
  49.         lastGo = (currentPageGroup == pageGroup) ? false : true// 라스트페이지 이동  설정
  50.  
  51.         firstPage = 1// 첫페이지값
  52.         prevPage = (currentPageGroup - 1) * pageSize - (pageSize-1)// 이전페이지값
  53.         nextPage = (currentPageGroup + 1) * pageSize - (pageSize-1)// 다음페이지값
  54.         lastPage = totalPage; // 마지막페이지값
  55.         // System.out.println(lastGo);
  56.  
  57.         startNum = (currentPage <= pageSize) ? 1 : ((currentPage - 1) / pageSize) * pageSize + 1// 페이지 리스트 첫번째배열값
  58.         endNum = (currentPageGroup < pageGroup) ? (((currentPage - 1) + pageSize) / pageSize) * pageSize : totalPage; // 페이지 리스트 마지막 배열값
  59.         // System.out.println(lastNum);
  60.         pageNavi = new int[endNum - startNum + 1];
  61.         for (int i = 0; i < pageNavi.length; i++) {
  62.             pageNavi[i] = startNum + i;
  63.         }
  64.  
  65.     }
  66.  
  67.     public void getNavi() {
  68.         setPrevGo(true);
  69.     }
  70.  
  71.     public boolean isPrevGo() {
  72.         return prevGo;
  73.     }
  74.  
  75.     public void setPrevGo(boolean prevGo) {
  76.         this.prevGo = prevGo;
  77.     }
  78.  
  79.     public int getTotalRow() {
  80.         return totalRow;
  81.     }
  82.  
  83.     public void setTotalRow(int totalRow) {
  84.         this.totalRow = totalRow;
  85.     }
  86.  
  87.     public int getTotalPage() {
  88.         return totalPage;
  89.     }
  90.  
  91.     public void setTotalPage(int totalPage) {
  92.         this.totalPage = totalPage;
  93.     }
  94.  
  95.     public int getCurrentPage() {
  96.         return currentPage;
  97.     }
  98.  
  99.     public void setCurrentPage(int currentPage) {
  100.         this.currentPage = currentPage;
  101.     }
  102.  
  103.     public int getPageGroup() {
  104.         return pageGroup;
  105.     }
  106.  
  107.     public void setPageGroup(int pageGroup) {
  108.         this.pageGroup = pageGroup;
  109.     }
  110.  
  111.     public boolean isFirstGo() {
  112.         return firstGo;
  113.     }
  114.  
  115.     public void setFirstGo(boolean firstGo) {
  116.         this.firstGo = firstGo;
  117.     }
  118.  
  119.     public boolean isLastGo() {
  120.         return lastGo;
  121.     }
  122.  
  123.     public void setLastGo(boolean lastGo) {
  124.         this.lastGo = lastGo;
  125.     }
  126.  
  127.     public boolean isNextGo() {
  128.         return nextGo;
  129.     }
  130.  
  131.     public void setNextGo(boolean nextGo) {
  132.         this.nextGo = nextGo;
  133.     }
  134.  
  135.     public int[] getPageNavi() {
  136.         return pageNavi;
  137.     }
  138.  
  139.     public void setPageNavi(int[] pageNavi) {
  140.         this.pageNavi = pageNavi;
  141.     }
  142.  
  143.     public int getListSize() {
  144.         return listSize;
  145.     }
  146.  
  147.     public void setListSize(int listSize) {
  148.         this.listSize = listSize;
  149.     }
  150.  
  151.     public int getPageSize() {
  152.         return pageSize;
  153.     }
  154.  
  155.     public void setPageSize(int pageSize) {
  156.         this.pageSize = pageSize;
  157.     }
  158.  
  159.     public int getNextPage() {
  160.         return nextPage;
  161.     }
  162.  
  163.     public void setNextPage(int nextPage) {
  164.         this.nextPage = nextPage;
  165.     }
  166.  
  167.     public int getPrevPage() {
  168.         return prevPage;
  169.     }
  170.  
  171.     public void setPrevPage(int prevPage) {
  172.         this.prevPage = prevPage;
  173.     }
  174.  
  175.     public int getLastPage() {
  176.         return lastPage;
  177.     }
  178.  
  179.     public void setLastPage(int lastPage) {
  180.         this.lastPage = lastPage;
  181.     }
  182.  
  183.     public int getFirstPage() {
  184.         return firstPage;
  185.     }
  186.  
  187. }

pop_zipsearch.jsp

  1. <%@page import="nzin.co.kr.common.controller.PagingNavi"%>
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"
  3.     pageEncoding="UTF-8"%>
  4. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  5. <%
  6. // PagingNavi pNavi = (PagingNavi)request.getAttribute("pn");
  7.  
  8. // out.print(pNavi.getNextPage());
  9. %>
  10. <!DOCTYPE html>
  11. <html>
  12. <head>
  13. <meta charset="UTF-8">
  14. <title>Insert title here</title>
  15. <link href="/resources/css/common.css" rel="stylesheet">
  16.  
  17. <!-- common script group -->
  18. <jsp:include page="/resources/include/script.jsp" flush="false" />
  19. <!-- common script group -->
  20.    
  21. <script language="javascript">
  22.    
  23.  
  24.     function ValueSelect(zip, addr_dong, addr_road, build_name) {
  25.     //  opener.document.getElementById("zipcode1_dong").value=zip1;
  26.         $("#zipcode",opener.document).val(zip);
  27.         $("#address_dong",opener.document).val(addr_dong);
  28.         $("#address_road",opener.document).val(addr_road);
  29.         $("#addr_detail_dong",opener.document).val(build_name);
  30.         $("#addr_detail_road",opener.document).val(build_name);
  31.        
  32.         self.close();
  33.    
  34.     }
  35.  
  36. </script>
  37. </head>
  38. <body>
  39.     <h1 style="color:#ffffff">ZIPCODE SEARCH</h1>
  40.     <br> result : ${resultCount }
  41.     <form name="zip_frm" method="get" action="/popup/pop_zipsearch_list.do">
  42.         <table cellspacing="0" cellpadding="0" style="width: 100%;">
  43.             <tr>
  44.                
  45.                 <td colspan="2">
  46.                     <div class="content-form-header-wrap content-form-header-wrap-blue">검색어를
  47.                         입력해주세요</div>
  48.                 </td>
  49.             </tr>
  50.             <tr style="height:45px;">
  51.                 <td class="content-form-field-name">동/건물명 입력</td>
  52.                 <td><input type="text" name="d_name" id="d_name" value="수택동" class="content-form-field-input">
  53.                 <input type="submit" value="search" id="sbutton"></td>
  54.             </tr>
  55.             <tr>
  56.                 <td>우편번호</td>
  57.                 <td>동주소</td>
  58.             </tr>
  59.  
  60.             <c:forEach var="zlist" items="${ziplist}">
  61.                 <tr>
  62.                     <td>${zlist.zipcode}</td>
  63.                     <td><a href="javascript:void(0);"
  64.                         onclick="ValueSelect('${zlist.zipcode}', '${zlist.sido} ${zlist.sigungu}  ${zlist.myon} ${zlist.road_name} ${zlist.building_no} ${zlist.building_no_sub}', '${zlist.sido} ${zlist.sigungu}  ${zlist.myon} ${zlist.road_name} ${zlist.building_no} ${zlist.building_no_sub}', '${zlist.sigungu_building_name }');">${zlist.sido}
  65.                             ${zlist.sigungu} ${zlist.myon} ${zlist.road_name}
  66.                             ${zlist.building_no} ${zlist.building_no_sub}
  67.                             ${zlist.sigungu_building_name }</a></td>
  68.                 </tr>
  69.             </c:forEach>
  70.  
  71.         </table>
  72.     </form>
  73.     <c:if test="${pn.firstGo == true }">
  74.         <a href="/popup/pop_zipsearch_list.do?page=${pn.firstPage }&pagesize=${pn.listSize}&d_name=${param.d_name}">처음</a>
  75.     </c:if>
  76.     <c:if test="${pn.prevGo == true }">
  77.         <a href="/popup/pop_zipsearch_list.do?page=${pn.prevPage }&pagesize=${pn.listSize}&d_name=${param.d_name}">이전</a>
  78.     </c:if>
  79.    
  80.     <c:forEach var="plist" items="${pn.pageNavi }">
  81.         <a href="/popup/pop_zipsearch_list.do?page=${plist }&pagesize=${pn.listSize}&d_name=${param.d_name}"><c:choose><c:when test="${pn.currentPage == plist}"><b>[${plist }]</b></c:when><c:otherwise>${plist }</c:otherwise></c:choose></a>
  82.     </c:forEach>
  83.     <c:if test="${pn.nextGo == true }">
  84.         <a href="/popup/pop_zipsearch_list.do?page=${pn.nextPage }&pagesize=${pn.listSize}&d_name=${param.d_name}">다음</a>
  85.     </c:if>
  86.     <c:if test="${pn.lastGo == true }">
  87.         <a href="/popup/pop_zipsearch_list.do?page=${pn.lastPage }&pagesize=${pn.listSize}&d_name=${param.d_name}">마지막</a>
  88.     </c:if>
  89.    
  90. </body>
  91. </html>


여기부터는 오라클 설정

1. 패키지 생성


  1. CREATE OR REPLACE PACKAGE TYPES AS --> 패키지명은 "TYPES"
  2.   TYPE cursorType IS REF CURSOR;    --> 패키지에 생성된 커서타입 REF CURSOR
  3. END TYPES;


2. 프로시저 생성

  1. CREATE OR REPLACE PROCEDURE UP_ZIPCODE_SEARCH (
  2.      PSEARCH_FIELD     IN VARCHAR2, --SEARCH FIELD
  3.      PLIST1       OUT  TYPES.CURSORTYPE, --> 첫째 select값을 PLIST1 커서에 담는다.
  4.      PLIST2     OUT  NUMBER, --> 두번째 전체 count값을 PLIST2에 담는다.
  5.      PAGE   IN NUMBER,
  6.      PAGESIZE IN NUMBER
  7.      
  8. )
  9. AS
  10. BEGIN
  11.  
  12. --LIST1
  13.  OPEN PLIST1 FOR    --> 커서를 오픈하고 ";"까지의 select값을 담는다.
  14.  --SELECT zipcode, sido, sigungu, b_name FROM ZIPCODE_NEW WHERE B_NAME LIKE ''||PSEARCH_FIELD||'%' AND ROWNUM < 10;
  15.  SELECT * FROM (
  16.  SELECT ROWNUM RNUM, zipcode, sido, sigungu, myon, b_name, road_name, building_no, building_no_sub, sigungu_building_name  FROM (
  17.  SELECT zipcode, sido, sigungu, myon, b_name, road_name, building_no, building_no_sub, sigungu_building_name  FROM ZIPCODE_NEW
  18.  WHERE B_NAME LIKE ''||PSEARCH_FIELD||'%'  OR ROAD_NAME LIKE ''||PSEARCH_FIELD||'%'
  19.  )
  20.  ) WHERE RNUM BETWEEN ((PAGE-1) * 10 + 1) AND (PAGE * PAGESIZE) ;
  21.  
  22. --LIST2
  23.  SELECT count(zipcode) INTO PLIST2 FROM ZIPCODE_NEW WHERE B_NAME LIKE ''||PSEARCH_FIELD||'%' OR ROAD_NAME LIKE ''||PSEARCH_FIELD||'%' ;
  24.  
  25. END UP_ZIPCODE_SEARCH;




728x90
반응형