본문 바로가기

Web/Frame Work

resultClass resultMap


HasMap 같은 경우 resultClass로 사용시 문제 오라클의 경우 대문자로 컬럼명을 적어주어야 함.
( Bug )


iBatis ( resultClass )

MyBatis ( resultType )

resultClass 란?

-결과클래스, 결과의 값 타입을 의미 아래의  쿼리를 수행하면 정수형 결과가 나올 것입니다. 그 정수형결과를(숫자)

 자바에서 숫자는 Integer 입니다. Integer 형으로 값을 받는다.

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

      select ifnull(max(seq),0) from board

  </select>

   아래의 쿼리라면 com.board.vo 패키지의 BoardVo 클래스 (gettersetter가 존재) 타입으로 해당 쿼리 결과를 받는것.

  <select id="BoardRead" resultClass="com.board.vo.BoardVo" parameterClass="Integer">

      select board_no, title, subject, reg_date from board where board_no = #boardNo#

  </select>   

 

totalVO.java

--------------------------

private String member_id;

private String name;

private int count;

 

// getter:setter

ResultMap 차이점

<resultMap class="java.util.HashMap" id="AdminSendMessageResult">
   <result column="MESSAGE_ID" property="MESSAGE_ID" />
   <result column="MESSAGE" property="MESSAGE" javaType="java.lang.String" jdbcType="CLOB"/>
</resultMap>

사용 가능

MyBatis --- 전부 작성해주어야함.


<resultMap id="SelectUserResultMap" type="kr.co.raonsolution.commons.db.HashMapHandler">
      <id property="SEQ" column="SEQ" javaType="int" jdbcType="NUMERIC"/>
      <result property="CLINIC" column="CLINIC" javaType="int" jdbcType="VARCHAR" />
      <result property="CATEGORY_ID" column="CATEGORY_ID" javaType="int" jdbcType="NUMERIC" />
      <result property="THEME_ORDER" column="THEME_ORDER" javaType="int" jdbcType="NUMERIC"/>
      <result property="SUBJECT" column="SUBJECT" javaType="java.lang.String" jdbcType="VARCHAR"/>
      <result property="CONTENTS" column="CONTENTS" javaType="java.lang.String" jdbcType="CLOB"/>
</resultMap>

=======================================================================================================

다른 select 구문을 호출하기 위해 대체 방법!!!

<resultMap id="SelectUserResultMap" type="kr.co.raonsolution.commons.db.HashMapHandler">
      <id property="SEQ" column="SEQ" javaType="int" jdbcType="NUMERIC"/>
      <result property="CLINIC" column="CLINIC" javaType="int" jdbcType="VARCHAR"  />
      <result property="THEME_ORDER" column="THEME_ORDER" javaType="int" jdbcType="NUMERIC"/>
      <result property="SUBJECT" column="SUBJECT" javaType="java.lang.String" jdbcType="VARCHAR"/>
      <result property="CONTENTS" column="CONTENTS" javaType="java.lang.String" jdbcType="CLOB"/>
 </resultMap>
   
     <!--  테마( CT_THEME ) 상세정보 -->
    <select id="selectData" parameterType="hashmap" resultMap="SelectUserResultMap" useCache="false">
        SELECT SEQ, CLINIC, THEME_ORDER, SUBJECT, CONTENTS
        FROM CT_THEME
        WHERE SEQ = #{seq}
    </select>   


resultMap id

<select>문에 사용 될 resultMap id 이름 이라고 생각하면됨.
type = 패키지 경로를 포함한 클래스 전체명이거나 티입 별칭 자바빈이나 VO 등등 을 사용하면 MyBatis는 타입을 찾아낼수 있다..

id ->

id 요소는 내포된 결과 매핑에서 매우 중요한 역할을 담당한다.
결과 중 유일한 것을 찾아내기 위한 한개 이상의 프로퍼티를 명시해야만 한다.
가능하면 결과 중 유일한 것을 찾아낼 수 있는 프로퍼티들을 선택하라.
기본키가 가장 좋은 선택이 될 수 있다.
where 절에 들어갈 property를 설정해주면 된다.

property
결과 칼럼에 매핑하기 위한 필드나 프로퍼티. 자바빈 프로퍼티가 해당 이름과 일치한다면,
그 프로퍼티가 사용될 것이다. 반면에 MyBatis는 해당 이름이 필드를 찾을 것이다. 점 표기를 사용하여
복잡한 프로퍼티 검색을 사용할 수 있다. 예를 들어, “username”과 같이 간단하게 매핑될 수 있거나
“address.street.number” 처럼 좀더 복잡하게 매핑될수도 있다.

column
데이터베이스의 칼럼명이나 별칭된 칼럼 라벨. resultSet.getString(columnName) 에 전달되는 문자열

javaType
ex) BoardDto <- resultMap 의 타입이 HashMap 으로 매핑이 된다면 처리를 명확히 하기 위해 javatype을 명시 해주어야합니다.

반면에 HashMap 으로 매핑한다면, 기대하는 처리를 명확히 하기 위해 javaType을 명시해야 한다.

jdbcType
지원되는 타입 목록에서 설명하는 JDBC 타입. JDBC 타입은 insert, update 또는 delete 하는 null 입력이 가능한 칼럼에서만 필요하다.
JDBC의 요구사항이지 MyBatis의 요구사항이 아니다. JDBC로 직접 코딩을 하다보면, null 이 가능한 값에 이 타입을 지정할 필요가 있을 것이다

 

 

 

'Web > Frame Work' 카테고리의 다른 글

MyBatis] 반복되는 쿼리 묶기 SQL, include 태그  (0) 2012.12.17
스트럿츠 돌아가는 구조  (0) 2012.11.14
Mode 1  (0) 2012.07.30
Model 1 ( 방명록 )  (0) 2012.07.30