iBatis 는 실제적으로 많이 사용 하고 있거나, 그렇지 않으면 앞으로 사용 할 때

굉장히 헷갈리는 부분이 있다.


바로 어떻게 value object와 column name을 맵핑 시킬 것인가,

혹은 값들을 어떻게 jsp에 뿌릴 것 인가, 즉슨 자바 코드에 어떻게 담아서 운반 할 것인가

에 대해 많은 고민이 있다.


이제 때에 맞는 iBatis value 맵핑에 대해 알아보자.


우선, 게시판을 예로 들겠다.

1. 글 작성 후 글을 DB에 insert 시킬 시

여기선 아마 write.jsp 라는 페이지에서 form값을 vo에 담아 controller 에다 넘겨 줄 것이다.


// vo 객체를 인스턴스화 하여 가져온다

<typeAlias alias="boardVo" type="jh.board.vo.BoardVO"/>


<insert id="write" parameterClass="boardVo">


이렇게 parameterClass는 vo값을 insert만 하고 아무런 result값도 가져오지 않을 때 주로 쓰인다.


2. 글 목록들을 Select 할 때

여기선 객체 하나만 가져오는게 아니라, 객체의 리스트 제네릭을 리턴 받는다.


<resultMap id="BoardResult" class="boardVo">

<result property="num" column="num" columnIndex="1" />

<result property="author" column="author" columnIndex="2" />

<result property="title" column="title" columnIndex="3" />

<result property="content" column="content" columnIndex="4" />

<result property="writeday" column="writeday" columnIndex="5" />

<result property="readcnt" column="readcnt" columnIndex="6" />

</resultMap>


<select id="list" resultMap="BoardResult" parameterClass="boardVo">


resultMap을 이용하여 boardVo 객체의 겟/셋 변수명과 DB의 column 명을 맵핑 한 후

그 결과를 조회하여 resultMap 을 Controller단 까지 넘겨 받는다.


여기서 유심히 볼 것은 그저 select만 한다면 paramterClass가 필요 없다.

하지만 검색 시 검색명과 검색값을 select 문에 넣기 위해 paramterClass가 또 쓰여 졌다.


3. 상세글이나 업데이트 시


<select id="retrieve" resultMap="BoardResult">


<select id="updateForm" resultMap="BoardResult">


위와 마찬가지로 resultMap을 사용 하여 값을 return 받아 프레젠테이션 층에 넘겨 준다.


4. 그런데 resultClass 는 어디서 사용 될까 ?


<select id="count" resultClass="Integer">

SELECT 

COUNT( num )

FROM board

</select>


위와 같이 그냥 Integer(정수형) 으로 num의 count만 받고 싶다면 저렇게 쓰면 된다.


물론 Delete문과 같이 리턴 받을게 없고 그저 삭제만 시킨다 함은 resultMap, resultClass를 쓸 필요가 없는 것이다.


요약 하자면,

resultMap - Object를 return 받을 때 사용

resultClass - Integer 등 1개의 value형을 return 받을 때 사용

parameterClass - Object를 ibatis DML(#num#, #title#)문에 적용 시키고 싶을 때 사용



우리가 보통 게시판 검색이라던가 어떤 text form에서 값을 넘길 때,

jsp든 sever page든 모두 UTF-8로 인코딩 선언을 해놓아도 값 들이 깨지는 경우가 있다..


이럴 경우는 이렇게 해보자.


1. 우선 JSP 페이지의 인코딩을 모두 같은 인코딩방식으로 선언 해 준다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


2. 해당 프로젝트의 web.xml 설정

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

<init-param>

       <param-name>struts.i18n.encoding</param-name>  

       <param-value>UTF-8</param-value>

</init-param>

</filter>

참고로 본인은 Struts2를 개발 하여서 저 filter 태그 안에 init-param 태그를 선언 해준다 (<init-param>으로 부터 아래 4줄)


3. tomcat 및 weblogic Was의 server.xml

여기가 제일 중요하다.


<Connector connectionTimeout="20000" port="10000" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />


아 그런데, 본인은 위 설정만 해줘도 되더라. (이상하게 아래 코드를 넣으니 에러가 났다.. 그이유는 모르겠다)


<Connector executor="tomcatThreadPool"

               port="8080" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443" 

useBodyEncodingForURI="true"/>


우선은 위설정 해보고 안되면 밑 설정을 해보되 둘다 했을 때 에러 날 시, 위 Connector만 설정 해보자.

스트럿츠 커스텀 태그 ...


Action에서 ModelDriven 으로 객체를 return vo; 해준다면,

ibatis에서 resultMap으로 받은 객체를 jsp페이지에서 뿌려줄수 있다.


기본적으로 VO에 searchValue를 받았다면 jsp 커스텀 태그에선 아래와 같이 뿌려줄 수 있다.

<s:property value="%{searchValue}"/>


기본적으로 변수 선언과 if문에 대해서 살펴 보자.


<s:set name="searchValue" value="%{searchValue}" />

위는 action에서 받은 객체를 변수 선언 하는 법이다.


<s:set name="title" value="%{'title'}" />

위는 기본적으로 title이라는 String 값을 title이란 네임으로 변수 선언하는 법이다.


이 2개를 if문으로 매칭하고 싶다면 아래와 같이 쓰면 된다.

<s:if test="%{#searchItem == #title}"></s:if>

<s:if test="%{curPage == 1}"></s:if> <!-- 숫자 비교 -->


커스텀 태그로 for문을 만들고 싶다면 s:iterator 를 쓰면 된다.

아래와 같이, 일단 bean 설정을 한 뒤

<s:bean name="org.apache.struts2.util.Counter" id="pageCounter">

<s:param name="first" value="1" />

<s:param name="last" value="10}" />

</s:bean>


<s:iterator value="pageCounter" status="stat">

<span><s:property value="%{pageCounter.current}" /></span>

<s:/iterator>


위처럼 iterator를 사용하면 

<span>1</span> ... <span>10</span>

까지 출력이 된다. 이해가 되지 않는다면 구글찌잉... 께 물어보자.

'Server Enterprise > Struts2' 카테고리의 다른 글

[Struts2] File Download  (0) 2013.05.09
[Struts2] Multi File Upload  (0) 2013.05.09
Struts2 Action과 Value Object 매핑  (0) 2013.02.21
Struts2 기본 셋팅과 사용법  (0) 2013.02.21
struts.properties  (0) 2013.02.08

+ Recent posts