(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence)

Similar documents
I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

Intro to Servlet, EJB, JSP, WS

슬라이드 1

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

Spring Boot/JDBC JdbcTemplate/CRUD 예제

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Spring Boot

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D>

Web Service Computing

신림프로그래머_클린코드.key

KYO_SCCD.PDF

본 강의에 들어가기 전

Interstage5 SOAP서비스 설정 가이드

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

슬라이드 1

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

ALTIBASE 사용자가이드 Templete

No Slide Title

Microsoft PowerPoint - Smart CRM v4.0_TM 소개_ pptx

JUNIT 실습및발표

파워포인트 템플릿

교육2 ? 그림

JavaGeneralProgramming.PDF

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

ALTIBASE 사용자가이드 Templete

제8장 자바 GUI 프로그래밍 II

J2EE Concepts

Spring Data JPA Many To Many 양방향 관계 예제

슬라이드 1

쉽게 풀어쓴 C 프로그래밊

Spring

중간고사

iBATIS-SqlMaps-2-Tutorial

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편

어댑터뷰

뇌를 자극하는 JSP & Servlet 슬라이드

PowerPoint 프레젠테이션

JAVA Bean & Session - Cookie

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

< 목차 > 1. Data Access Service 개요 (ibatis 활용 ) 3. DBIO 소개

14-Servlet

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

(Microsoft PowerPoint - spring_ibatis.ppt [\310\243\310\257 \270\360\265\345])

2장 변수와 프로시저 작성하기

J2EE & Web Services iSeminar

Spring Batch 2.0 시작하기

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

MVVM 패턴의 이해

PowerPoint Presentation

슬라이드 1

슬라이드 1

[Brochure] KOR_TunA

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

PowerPoint 프레젠테이션

Portal_9iAS.ppt [읽기 전용]

mytalk

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

ibmdw_rest_v1.0.ppt

ALTIBASE 사용자가이드 Templete

MasoJava4_Dongbin.PDF

Microsoft PowerPoint - aj-lecture7.ppt [호환 모드]

JAVA PROGRAMMING 실습 08.다형성

09-interface.key

서블릿의라이프사이클 뇌를자극하는 JSP & Servlet

04장

ALTIBASE 사용자가이드 Templete

Network Programming

Data Provisioning Services for mobile clients

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

슬라이드 1

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

슬라이드 1

단계

Dialog Box 실행파일을 Web에 포함시키는 방법

PowerPoint 프레젠테이션

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

교육자료

PowerPoint Presentation

The Self-Managing Database : Automatic Health Monitoring and Alerting

슬라이드 1

4S 1차년도 평가 발표자료

rmi_박준용_final.PDF

Corporate PPT Template

chapter1,2.doc

JDBC 소개및설치 Database Laboratory

Microsoft PowerPoint - 웹프로그래밍_ ppt [호환 모드]

PowerPoint Presentation

PowerPoint 프레젠테이션

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Transcription:

8 중 1 2008-01-31 오전 12:08 오픈소스스터디 jpetstore 예제로살펴보는 Spring MVC와 ibatis 연동 Added by Sang Hyup Lee, last edited by Sang Hyup Lee on 1월 16, 2007 (view change) Labels: (None) 지금까지 Spring MVC 를셋팅하는과정에서부터하나의 HTTP Request 를처리하는과정, 그리고 Spring MVC 를처리하는과정중에발생하는중요한 HandlerMapping 과 View 를결정하는것까지살펴보았다. 이제전체적인 Spring MVC 처리과정을정리하는입장에서하나의예제를소스코드와함께살펴보면서알아보도록하자. Table of Contents jpetstore 의실제적인초기화면 (index.do) 모든 URL 에해당하는 petstore-servlet.xml 에서의셋팅 "shop/viewcategory.do" 요청을처리하는과정 ViewCategoryController jpetstore 에서의 ibatis 프레임워크셋팅 참고문헌 applicationcontext.xml 에서 property 파일로드 dataaccesscontext-local.xml 에서 Data Source 셋팅하기 sql-map-config.xml 파일살펴보기 jpetstore의실제적인초기화면 (index.do) "jpetstore 설치하기 " 세션에서 jpetstore 를 Tomcat 에배치하고웹브라우저에서정상적으로실행해보는것까지했었다. 물론정상적으로설치하였다면내부로들어가여러가지기능을해보았으리라생각된다. 가능하면순서대로모든것을살펴보면좋겠지만, 문서의성격상 Spring framework 의많은기능중 jpetstore 에해당하는부분을중심으로살펴보다보니전부다기술하진못한다. 이해해주길바라면서설치과정후, 다음페이지를통해서이번세션에서설명하고자하는것을살펴보자. jpetstore 를정상적으로설치하고첫페이지에서 "Enter the Store"" 클릭하여들어가보면다음그림과같은화면을볼수있다.

8 중 2 2008-01-31 오전 12:08 실제주소를살펴보면 "jpetstore/shop/index.do" 인것을볼수있다. URL 이 ".do" 로끝나는것은초기 WEB-INF/web.xml 에서 HTTP Request 를처음으로받아서처리하고중개하는 DispatcherServlet 을 "petstore"""" 서블릿명으로 "*.do"" URL Pattern 으로매핑하는것으로알수있다. <servlet> <servlet-name>petstore</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>petstore</servlet-name> <!-- <servlet-name>action</servlet-name> --> <url-pattern>*.do</url-pattern> </servlet-mapping> 따라서실제로 index.do 라는 URL 로 HTTP 를요청하게되면 DispatcherServlet 이처리하는것을알수있다. 하지만, index.do 에해당하는페이지는별다른설명을할필요없는경우임으로여기서는생략하도록한다. 모든 URL에해당하는 petstore-servlet.xml 에서의셋팅 이제 jpetstore 에서 Spring MVC 의전체적인과정을살펴보기위해서카테고리를살펴보는페이지 (HTTP Request) 를분석해보자. jpetstore 실제초기화면 (index.do) 에서각카테고리 ( 동물 ) 에해당하는것을아무거나클릭하면 "shop/viewcategory.do" 라는 URL 로요청되는것을볼수있다. 여기에해당하는 URL 을통해서 Spring MVC 의전체적인처리과정을살펴볼것이다. 먼저, 모든 URL 에해당하는 Controller 를셋팅하고있는 petstore-servlet.xml 파일을살펴보자.

8 중 3 2008-01-31 오전 12:08 <!-- ========================= DEFINITIONS OF PUBLIC CONTROLLERS ========================= --> <bean id="defaulthandlermapping" class="org.springframework.web.servlet.handler.beannameurlhandlermapping" /> <bean name="/shop/additemtocart.do" class="org.springframework.samples.jpetstore.web.spring.additemtocartcontroller" > <bean name="/shop/checkout.do" class="org.springframework.samples.jpetstore.web.spring.viewcartcontroller" > <property name="successview" value="checkout"/> <bean name="/shop/index.do" class="org.springframework.web.servlet.mvc.parameterizableviewcontroller" > <property name="viewname" value="index"/> <bean name="/shop/newaccount.do" class="org.springframework.samples.jpetstore.web.spring.accountformcontroller" > <property name="validator" ref="accountvalidator"/> <property name="successview" value="index"/> <bean name="/shop/removeitemfromcart.do" class="org.springframework.samples.jpetstore.web.spring.removeitemfromcartcontro <bean name="/shop/signoff.do" class="org.springframework.samples.jpetstore.web.spring.signoffcontroller" /> <bean name="/shop/searchproducts.do" class="org.springframework.samples.jpetstore.web.spring.searchproductscontroller" > <bean name="/shop/signon.do" class="org.springframework.samples.jpetstore.web.spring.signoncontroller" > <bean name="/shop/signonform.do" class="org.springframework.web.servlet.mvc.parameterizableviewcontroller" > <property name="viewname" value="signonform"/> <bean name="/shop/updatecartquantities.do" class="org.springframework.samples.jpetstore.web.spring.updatecartquantitiescontro <bean name="/shop/viewcart.do" class="org.springframework.samples.jpetstore.web.spring.viewcartcontroller" > <property name="successview" value="cart"/> <bean name="/shop/viewcategory.do" class="org.springframework.samples.jpetstore.web.spring.viewcategorycontroller" > <bean name="/shop/viewitem.do" class="org.springframework.samples.jpetstore.web.spring.viewitemcontroller" > <bean name="/shop/viewproduct.do" class="org.springframework.samples.jpetstore.web.spring.viewproductcontroller" > "shop/viewcategory.do" 요청을처리하는과정 우리가살펴볼 URL 은 "shop/viewcategory.do""". 그런데여기서모든 URL 에해당하는 Controller 를바인딩하는부분을추가한것은앞으로설명한처리과정을동일하게따르고있음으로보여주기위함이다. 그러면 "shop/viewcategory.do" 요청에해당하는 Controller 를바인딩하기위한 WebApplicationContext 의설정을살펴보면다음과같다. <bean name="/shop/viewcategory.do" class="org.springframework.samples.jpetstore.web.spring.viewcategorycontroller" > URL 의동일한 name 으로 bean 태그를셋팅하고있다. 그리고사용하는클래스가 org.springframework.samples.jpetstore.web.spring.viewcategorycontroller 가된다. 즉, "shop/viewcategory.do"" 해당하는 HTTP 요청을처리하는컨트롤러가 ViewCategoryController 가된다는것이다. 그러면, 여기서 "shop/viewcategory.do" 요청을처리하는 Spring MVC Controller 의전체적인처리과정을그림으로살펴보고계속설명하기로한다.

8 중 4 2008-01-31 오전 12:08 위의그림은 Spring MVC 처리과정중에 Controller 가 ModelAndView 객체를리턴하기까지의과정을그림으로도식화한것이다. 위의그림에서노란색박스로처리된것은 WebApplicationContext 설정을포함하고있는 XML 파일이고, 파란색박스로처리된것은처리과정중에사용되는인터페이스또는클래스이다. 처리과정에서 XML 파일을표시해둔것은실제처리과정에서 XML 파일을직접적으로사용하는것은아니나 ( 컨테이너에이미적재 - 메모리상에 - 되어있다 ), 이해를돕기위해 XML 설정을포함한설명을하기위함이다. Spring MVC 처리과정중에서 "shop/viewcategory.do"" 해당하는요청을처리하기위해서 DispatcherServlet 은 HandlerMapping(petstoreservlet.xml) 을통해서 ViewCategoryController 가해당요청을처리하는 Controller 임을알아온다. 그리고 ViewCategoryController 는 DispatcherServlet 에게 ModelAndView 를반환하기위해서위의그림과같은처리과정을거치게된다. DispatcherServlet 이 HTTP 요청을최초로받아최종 View 객체를얻어응답하기까지중요한역할을담당하지만, 개발자는 Spring MVC 의처리과정을이해하고사용하기만할뿐실제소스코드로작성해야할부분은비즈니스로직에해당하는 Controller 클래스를작성하는데있다. 따라서실제중요한부분은 Controller 가처리하는과정을해당요청에맞는형태로개발할수있는것이중요하다. 그런면에서 jpetstore 의예로 "shop/viewcategory.do"" 해당하는처리과정을자세하게살펴보는것은중요하다라고할수있다. ViewCategoryController 이제실제비지니스레이어를담당하는 Controller 클래스에대해서알아보자. 여기서는 ViewCategoryController 클래스를살펴보게되는데, 모든 Controller 클래스들은 org.springframework.web.servlet.mvc.controller 를 implements 하여구현한클래스임으로구현해야할부분이많치않다. 실제로 org.springframework.web.servlet.mvc.controller 를 implements 하여구현하고자할경우, handlerequest(httpservletrequest request, HttpServletResponse response) 메소드를구현해주기만하면된다. 이제 ViewCategoryController 클래스를살펴보자.

8 중 5 2008-01-31 오전 12:08 ViewCategoryController.java package org.springframework.samples.jpetstore.web.spring; import java.util.hashmap; import java.util.map; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.beans.support.pagedlistholder; import org.springframework.samples.jpetstore.domain.category; import org.springframework.samples.jpetstore.domain.logic.petstorefacade; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.mvc.controller; /** * @author Juergen Hoeller * @since 30.11.2003 */ public class ViewCategoryController implements Controller { private PetStoreFacade petstore; public void setpetstore(petstorefacade petstore) { this.petstore = petstore; public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { Map model = new HashMap(); String categoryid = request.getparameter("categoryid"); if (categoryid!= null) { Category category = this.petstore.getcategory(categoryid); PagedListHolder productlist = new PagedListHolder(this.petStore.getProductListByCategory(categoryId)); productlist.setpagesize(4); request.getsession().setattribute("viewproductaction_category", category); request.getsession().setattribute("viewproductaction_productlist", productlist); model.put("category", category); model.put("productlist", productlist); else { Category category = (Category) request.getsession().getattribute( "ViewProductAction_category"); PagedListHolder productlist = (PagedListHolder) request.getsession().getattribute( "ViewProductAction_productList" if (category == null productlist == null) { throw new IllegalStateException("Cannot find pre-loaded category and product list" ); String page = request.getparameter("page"); if ("next".equals(page)) { productlist.nextpage(); else if ("previous".equals(page)) { productlist.previouspage(); model.put("category", category); model.put("productlist", productlist); return new ModelAndView("Category", model); 사실상, 특별히설명이필요한부분은거의없다. Request 의파라미터로넘어오는 categoryid 를받아와서 categoryid 가 null 이아닌경우, 해당카테고리에해당하는리스트를 ModelAndView 로 "Category" 라는이름으로 Model 을반환해준다. categoryid 가 null 인경우, 해당 session attribute 에 "ViewProductAction_category" 로 Category 클래스를가져와 ModelAndView 로 "Category" 라는이름으로 Model 을반환해준다. 오히려여기서필요한설명은 IoC 를지원하기위해서 setter injection 을지원하는다음의코드부분이다. 위에서보는바와같이 PetStoreFacade 인터페이스를이용하여실제구현하고자하는클래스들은지원하고있다이를 setter injection 으로지원하고있다. 그리고, 각카테고리에해당하는리스트를얻기위해서 this.petstore.getproductlistbycategory(categoryid) 에대한이해가필요하다. 이것은 ibatis framework 를사용하기때문에다음세션에서살펴보도록하겠다. getproductlistbycategory 메소드는 PetStoreFacade 인터페이스에서정의해두고, PetStoreImpl 에서구현해둔메소드가된다. 그리고실제쿼리를실행하는부분에서 ibatis 를사용하기때문에별도로살펴보아야한다. jpetstore 에서의 ibatis 프레임워크셋팅 ibatis 를이용하여어떻게웹애플리케이션을개발하는지에대해서는여기서언급하지않겠다. 현재다양하게나와있는레퍼런스들이있기때문이

8 중 6 2008-01-31 오전 12:08 다. 참고문헌을참조하여 ibatis 에대한 study 를개인적으로진행해야한다. 여기서다룰내용은 jpetstore 에서 Spring 프레임워크와 ibatis 프레임워크를어떻게셋팅하고두개의프레임워크가어떻게연동되어져개발되는지에대한내용이다. 먼저, jpetstore 에서 ibatis 프레임워크를셋팅하는방법에대해서알아보자. applicationcontext.xml 에서 property 파일로드 이전에 jpetstore 에서의 Spring 초기설정과 IoC 에서언급한바와같이 web.xml 의 context-param 엘리먼트의 param-value 의값으로정의되어진 dataaccesscont ext-local.xml 과 applicationcontext.xml 파일이 POJO 빈의생명주기를관리하는정보를담고있다고하였다. 여기서근간이되는파일이 applicationcontext.xml 인데해당하는모든내용을살펴보진않았다. 이중에서우리가여기서살펴볼부분은 property 파일을 WAS 에로드해두고사용하게하는부분이다. value 엘리먼트로주어진 WEB-INF/jdbc.properties 파일을 ibatis DataSource 설정파일로사용하게되는데내용은다음과같다. <!-- Configurer that replaces ${... placeholders with values from properties files --> <!-- (in this case, mail and JDBC related properties) --> <bean id="propertyconfigurer" class="org.springframework.beans.factory.config.propertyplaceholderconfigurer" > <property name="locations"> <list> <value>web-inf/mail.properties</value> <value>web-inf/jdbc.properties</value> </list> </property> 위에서잠시언급한바와같이 value 엘리먼트의값으로주어진두개의 properties 파일을 WAS 로드하여웹애플리케이션에서사용할수있게된다. 여기서는특별한설명이필요한것은아니다. WEB-INF 디렉토리에 properties 파일이존재하면되고, 일반적으로작성되는 properties 규칙을따르고있기때문에이에대한설명을할필요도없을듯하다. 다음은 properties 파일을 WAS 에로드하고 Spring 프레임워크의컨텍스트파일에서 Data Source 를어떻게셋팅하는지알아보자. dataaccesscontext-local.xml 에서 Data Source 셋팅하기 web.xml 의 contextconfiglocation 이라는 param-name 의 value 로주어진두개의파일중, dataaccesscontext-local.xml 파일이 Data Source 셋팅을담당하고있으며여기서기본적인데이터베이스와관련된셋팅을하고있다. 먼저, dataaccesscontext-local.xml 파일의내용중위에서로드하였던 properties 파일의내용을셋팅하는부분을살펴보자. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" > <!-- - Application context definition for JPetStore's data access layer. - Accessed by business layer objects defined in "applicationcontext.xml" - (see web.xml's "contextconfiglocation"). - - This version of the data access layer works on a combined database, - using a local DataSource with DataSourceTransactionManager. It does not - need any JTA support in the container: It will run as-is in plain Tomcat. --> <beans> <!-- ========================= RESOURCE DEFINITIONS ========================= --> <!-- Local Apache Commons DBCP DataSource that refers to a combined database --> <!-- (see dataaccesscontext-jta.xml for an alternative) --> <!-- The placeholders are resolved from jdbc.properties through --> <!-- the PropertyPlaceholderConfigurer in applicationcontext.xml --> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="${jdbc.driverclassname"/> <property name="url" value="${jdbc.url"/> <property name="username" value="${jdbc.username"/> <property name="password" value="${jdbc.password"/> <!-- 중간생략 --> </beans> "WEB-INF/jdbc.properties" 파일을살펴보면 jdbc.driverclassname 부터해서데이터베이스커넥션과관련된정보를담고있다. 위의 <bean id="datasource"> 에서 property 의 value 로주어지는 ${ 에해당하는값들이 jdbc.properties 에서셋팅되어진값들이들어가게된다. 이부분은 ANT 와같이 XML 을로드하는방법을따름으로별도의설명은필요없을듯하다. 다음은 Spring 프레임워크에서트랜잭션매니져를담당하는클래스를셋팅하는부분이다.

8 중 7 2008-01-31 오전 12:08 <!-- Transaction manager for a single JDBC DataSource --> <!-- (see dataaccesscontext-jta.xml for an alternative) --> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager" > <property name="datasource" ref="datasource"/> 위에서셋팅한 datasource 는 org.springframework.jdbc.datasource.datasourcetransactionmanager 클래스를이용하여트랜잭션관리는하는것을알수있다. org.springframework.jdbc.datasource.datasourcetransactionmanager 클래스는 Spring 프레임워크에서기본적으로제공하는 TransactionManager 클래스가된다. 소스코드를따라가보면기본적으로제공하는 commit 이나 rollback 등의기본을메소드로제공하고있다. 다음은실제 ibatis 프레임워크를사용하여 Database layer 를담당하겠다는셋팅을해주는부분이다. <!-- SqlMap setup for ibatis Database Layer --> <bean id="sqlmapclient" class="org.springframework.orm.ibatis.sqlmapclientfactorybean" > <property name="configlocation" value="web-inf/sql-map-config.xml"/> <property name="datasource" ref="datasource"/> <bean> 엘리먼트태그아이디로 "sqlmapcliet" 가주어졍있고, org.springframework.orm.ibatis.sqlmapclientfactorybean 클래스를 class 값을하고있다. org.springframework.orm.ibatis.sqlmapclientfactorybean 클래스는 Spring 프레임워크에서 ibatis 를지원하기위한 FactoryBean 클래스이다. 두개의 property 엘리먼트를가지고있는데, 이미정의된 name 과 value 값이중요하다. 여기서는 value 로 "WEB-INF/sql-map-config.xml" 파일을설정하고있다. sql-map-config.xml 파일은 ibatis 에서쿼리를관리하고있는 XML 파일을하나의 config 파일로관리하는파일이다. 실제내용은다음부분에서살펴보도록한다. 다음은 DAO 인터페이스를 implements 하고있는각각의 ibatis 클래스를 sqlmapclient 와연결시켜주는설정이다. 여러개의설정중에하나만살펴보면된다. <bean id="categorydao" class="org.springframework.samples.jpetstore.dao.ibatis.sqlmapcategorydao" > <property name="sqlmapclient" ref="sqlmapclient"/> 위의 <bean> 엘리먼트의 id 로 categorydao 로설정되어져있고, 이를구현한클래스가 org.springframework.samples.jpetstore.dao.ibatis.sqlmapcategorydao 이다. SqlMapCategoryDao 는 CategoryDao 인터페이스를 ibatis 프레임워크와연동하여구현한클래스이다. 이러한개념을잠시확장해보면 ibatis 와마찬가지로 Spring 프레임워크는 persistence layer 를담당하고있는유명한프레임워크 ( 예를들면, Hibernate 같은 ) 를지원하고있다. org.springframework.orm 패키지가이를담당하고있다. 여기까지살펴본후실제각각의 DAO 인터페이스를구현한 (implements) 클래스의소스코드를살펴볼수있다. 각각의구현클래스들은 org.springframework.orm.ibatis.support.sqlmapclientdaosupport 클래스를 extends 하여 Spring 프레임워크에서제공하는 ibatis support 메소드를사용하여최종구현하고있다. 이렇게하면소스코드가아주깔끔하면서도읽기쉽도록구현할수있다. 예제소스코드는 sql-map-config.xml 파일을살펴본후살펴보도록하겠다. sql-map-config.xml 파일살펴보기 sql-map-config.xml 파일의내용은실제로간단하다. 각 DAO(Data Access Object) 클래스에해당하는쿼리를담당하고있는 XML 파일의경로를가지고있기때문이다. 특별한설명은필요없을듯하다. ibatis 에대한보다자세한내용은참고문헌을참조하면된다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmapconfig PUBLIC "-//ibatis.com//dtd SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd" > <sqlmapconfig> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/account.xml" /> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/category.xml" /> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/product.xml" /> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/item.xml" /> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/order.xml" /> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/lineitem.xml" /> <sqlmap resource="org/springframework/samples/jpetstore/dao/ibatis/maps/sequence.xml" /> </sqlmapconfig> 참고문헌

8 중 8 2008-01-31 오전 12:08 # SQL Maps2.0 개발자가이드 ( 한글판 ) : openframework.or.kr 에서번역된 ibatis 개발자가이드 # SQL Maps2.0 tutorial( 한글판 ) : openframework.or.kr 에서번역된 ibatis Tutorial 문서에대하여 최초작성자 : OSS: 이상협최초작성일 : 2006 년 11 월 02 일버전 : 0.5 문서이력 : 2006 년 11 월 02 일이상협문서최초생성 : jpetstore 예제로살펴보는 Spring MVC 와 2007 년 1 월 16 일이상협문서수정 : jpetstore 에서의 ibatis 프레임워크셋팅부분추가중 Eclipse Hibernate Tools Java Data-object Hibernate mapping Comprehensive J2EE IDE & Support www.myeclipseide.com 비트교육센터 java 강좌무료오픈소스웹솔루션자바프로그래밍전문교육, jsp, 디자이너를위한진정한웹솔루션 ejb, 자바vm, 자바빈즈, j2ee전문완벽한디자인적용과 100% 오픈교육. 소스 www.bitacademy.net www.topsmate.net WebLogic Management Download WebLogic monitoring Tool. Manage servers, JVM, Web Apps. AppManager.com/WebLogic-Monitor 내가하려는걸먼저해뒀군요. ^^ 제가 2 기스터디때했어야하는부분인데.. 그냥고마울따름이죠..~~~ Posted by 장회수 at 12 월 15, 2006 16:06 Site running on a free Atlassian Confluence Open Source Project License granted to JavaJiGi Project. Evaluate Confluence today. Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.3.1 Build:#643 1 월 22, 2007) - Bug/feature request - Contact Administrators