2009. 9. 2. 13:19

Spring MVC에서 간단한 iBatis사용예제


* 본예제는 실무스트링2.5(삼양미디어)의 예제를 기초로 만들었습니다.

1. 필요한 라이브러리들(jar)

물론, 이 전에 Java와 서버(저같은 경우 톰캣) jar가 잡혀 있어야 합니다.
(모르시는 분들은 검색추천 ㅡ_ㅡ;; 그래도 모르겠다는 분들은 뎃글 주시면 상세하게 설명해서 다시 올리겠습니다.)
Spring.jar
commons-logging.jar
commons-dbcp-1.2.2.jar
commons-pool-1.3.jar
ibatis-2.3.4.726.jar


2. web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <filter><!-- 한글설정을 위한 부분 -->
  <filter-name>encodingFilter</filter-name>
  <filter-class>
   org.springframework.web.filter.CharacterEncodingFilter
  </filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>EUC-KR</param-value>
  </init-param>
 </filter>
 
 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>

 <context-param><!-- log4j를 사용하려면 이런식으로.. -->
  <param-name>log4jConfigLocation</param-name>
  <param-value>/WEB-INF/properties/log4j.properties</param-value>
 </context-param>
 
 <listener>
  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
 
</web-app>


3. dispatcher-servlet.xml (서블릿설정)

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
  <!-- HandlerMapping -->
  <bean id="handlerMapping1"
   class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
   <property name="order" value="2" />
   <property name="alwaysUseFullPath" value="true" />
  </bean>

  <!-- Controller -->
  <bean id="indexController" name="/index.html" class="controller.IndexController">
   <property name="shopService" ref="shopService"/>
  </bean>

  <!-- Data Source -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
     destroy-method="close"
     p:driverClassName="com.mysql.jdbc.Driver"
     p:url="jdbc:mysql://localhost/spring?useUnicode=true&amp;characterEncoding=utf-8"
     p:username="root" p:password="1234" />
 
   <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
     <property name="dataSource" ref="dataSource" />
     <property name="configLocation" value="/WEB-INF/sqlMapConfig.xml" />
   </bean>
    
   <!-- shop -->
   <bean id="shopService" class="logic.ShopImpl">
    <property name="itemCatalog" ref="itemCatalog"/>
   </bean>
  
   <!-- itemCatalog -->
   <bean id="itemCatalog" class="logic.ItemCatalogImpl">
    <property name="itemDao" ref="itemDao"/>
   </bean>
  
   <!-- itemDao -->
   <bean id="itemDao" class="dao.ItemDaoImpl" autowire="byName">
    <property name="sqlMapClient" ref="sqlMapClient"/>
   </bean>

</beans>


4. sqlMapConfig.xml
- namespace로 구문을 호출해 사용하기 위해서는 sqlMap 에 namespace 를 사용하겠다는 속성을 아래와 같이 정의해 주어야 합니다.

<?xml version="1.0" encoding="euc-kr"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig> 
  <settings enhancementEnabled="true" useStatementNamespaces="true" />
  <sqlMap resource="dao/item.xml" />   
     
</sqlMapConfig>

5. 모델객체 정의
- src/logic/item.java
- DB에서 가져올 데이터 속성들을 저장하게될 모델 객체.

 package logic;

public class Item {
  private Integer itemId;
  private String itemName; 
  private Integer price; 
  private String description; 
  private String pictureUrl;
  
 public Integer getItemId() {
  return itemId;
 }
 public void setItemId(Integer itemId) {
  this.itemId = itemId;
 }
 public String getItemName() {
  return itemName;
  //return UiUtils.toUnicode(itemName);
 }
 public void setItemName(String itemName) {
  this.itemName = itemName;
 }
 public Integer getPrice() {
  return price;
 }
 public void setPrice(Integer price) {
  this.price = price;
 }
 public String getDescription() {
  return description;
  // return UiUtils.toUnicode(description);
 }
 public void setDescription(String description) {
  this.description = description;
 }
 public String getPictureUrl() {
  return pictureUrl;
 }
 public void setPictureUrl(String pictureUrl) {
  this.pictureUrl = pictureUrl;
 }
}


6. src/dao/item.xml
- 각각 같은 색으로 표시한것은 서로 매핑이 이루어져야 하는 부분이므로, 일치해야합니다.
- property 속성들은 위의 5번에서 작성한 item클래스의 속성들값과 일치해야합니다.

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Item">

 <typeAlias alias="Item" type="logic.Item" />
 
 <resultMap id="itemList" class="Item">
  <result property="itemId" column="itemid"/>
  <result property="itemName" column="itemname"/>
  <result property="price" column="price"/>
  <result property="description" column="description"/>
  <result property="pictureUrl" column="pictureurl"/>
 </resultMap>

 <select id="getItemList" resultMap="itemList">
  SELECT itemid, itemname, price, description, pictureurl FROM item
 </select>
 
</sqlMap>


7. src/dao/itemDao.java

 package dao;

import java.util.List;
import org.springframework.dao.DataAccessException;
import logic.Item;

public interface ItemDao {
 List<Item> getTeamList() throws DataAccessException;
}


8. 데이터 쿼리해서 가져오기.
 - src/dao/itemDaoImpl.java
 - 쿼리결과 데이터는 리스트 형식으로 item객체에 주르륵~ 해서 담아옵니다.

 package dao;

import java.util.List;
import logic.Item;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public class ItemDaoImpl extends SqlMapClientDaoSupport implements ItemDao {
 
 @SuppressWarnings("unchecked")
 @Override
 public List<Item> getTeamList() {
  // TODO Auto-generated method stub
  List<Item> itemList = getSqlMapClientTemplate().queryForList("Item.getItemList");
  return itemList;
 }

}


9. Controller
 - src/controller/IndexController.java
 - 아래와같이 itemList에 List형태로 받아와 뷰로 전달합니다.

 package controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import logic.Item;
import logic.Shop;

public class IndexController implements Controller{
 private Log log = LogFactory.getLog( IndexController.class.getSimpleName() );
 private Shop shopService;
 
 public void setShopService(Shop shopService) {
  this.shopService = shopService;
 }
 
 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
  throws Exception{
  
  List<Item> itemList = this.shopService.getItemList();
  ModelAndView mav = new ModelAndView();
  mav.setViewName("/WEB-INF/jsp/index.jsp");
  mav.addObject(itemList);
  
  log.info( "==== 데이타를 뷰로 전달완료===" );
  
  return mav;
 }
}



10. view작성
 - /WEB_INF/jsp/index.jsp

 <%@ page contentType="text/html;charset=UTF-8" %>
<%@ page session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="java.util.*" %>
<html>
<head>
 <title>상품 리스트 화면</title>
 <link rel="stylesheet" type="text/css" href="../css/shopping-1.css">
</head>
<body>
 <div align="center" class="body">
 <h2>상품 리스트 화면</h2>
 <table border="1" >
  <tr class="header">
   <th align="center" width="100">상품 ID</th>
   <th align="center" width="320">상품 명</th>
   <th align="center" width="100">가격</th>
  </tr>

  <c:forEach var="item" items="${itemList}">
   <tr class="record">
    <td align="center">
     <c:out value="${item.itemId}" />
    </td>
    <td align="left">
     <c:out value="${item.itemName}" />
    </td>
    <td align="right">
     <c:out value="${item.price}" />원
    </td>
   </tr>  
  </c:forEach>

 </table>
 </div>
</body>
</html>


* 결과
 => http://localhost:8080/shop/index.html


'OpenSource > MyBatis/iBatis' 카테고리의 다른 글

Spring MVC에서 간단한 iBatis사용예제  (3) 2009.09.02
iBatis 주요 Tag  (0) 2009.08.31
Trackback 1 Comment 3
  1. 사무령 2009.12.13 16:52 address edit & del reply

    jar 파일들은 ㅋㅋ 다운 받을수 있는 좋은 곳 있을 까요?

  2. Blue Morning 2010.02.01 17:57 신고 address edit & del reply

    메일주시면 jar파일 드리겠습니다. blue_0227@nate.com

  3. 알 수 없는 사용자 2012.08.22 18:34 address edit & del reply

    logic 안에 shop 이라는 것이 없는데...
    controller안에 IndexController에서 쓸려고 해서 오류가 납니다.
    shop은 어디에 있는거지용?