ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [spring] resultMap 사용하기
    JAVA 2021. 8. 17. 16:29

    resultMap


    1. 컬럼명과 멤버변수명이 다르면 매핑해주는 기능으로 사용한다.

     

    2. 참조하는 두 객체(=두 테이블) 간의 매핑해주는 기능으로 사용한다.

    참조변수로 다른 객체 즉, 다른 테이블을 참조키로 둔 경우 

    (ex. Board 가 Member 를 참조변수로 가지고 있다.)

     

    해당 member 테이블의 컬럼은 Board 객체에는 없는 멤버변수로 직접 매핑은 불가능하고

    가지고 있는 Member 참조변수에 매핑해주는 기능으로도 사용한다.


    resultMap 은 여러가지 형식으로 사용 가능하다.

     

    1. CRUD 태그에서 속성값 resultMap 으로 해당 resultMap 사용

     

    * CRUD? 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인

    Create(생성), Read(읽기,DB는 Select), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 

     

    >> CRUD 태그

    resultMap 속성에 사용할 <resultMap> 의 id 속성을 기입한다.

    해당 CRUD 태그에서 가져온 컬럼들을 <resultMap> 에서 매핑하여 객체에 매핑한다.

    	<!-- 게시물 상세보기 출력 -->
    	<select id="selectOneBoard" parameterType="Integer" resultMap="selectMap">
    		select b.bNum as b_num,
    		b.bTitle as b_title,
    		b.bContent as b_content,
    		b.bView as b_view,
    		b.bRef as b_ref,
    		b.bStep as b_step,
    		b.bRefOrder as b_refOrder,
    		b.bAnswerCnt as b_answerCnt,
    		b.bParentNum as b_parentNum,
    		b.bDeleteflag as b_deleteflag,
    		b.bRegdate as b_regdate,
    		m.memNum as m_memNum,
    		m.memName as m_memName
    		from board b left outer join member m on b.bWriter=m.memNum
    		where b.bNum=#{num}
    	</select>
    	
    	<!-- 게시물 리스트 출력 -->
    	<select id="selectListBoard" resultMap="selectListMap" parameterType="java.util.Map">
    		select * from ( select b.bNum as b_num,
    		b.bTitle as b_title,
    		b.bView as b_view,
    		b.bRef as b_ref,
    		b.bStep as b_step,
    		b.bRefOrder as b_refOrder,
    		b.bAnswerCnt as b_answerCnt,
    		b.bParentNum as b_parentNum,
    		b.bDeleteflag as b_deleteflag,
    		b.bRegdate as b_regdate,
    		m.memNum as m_memNum,
    		m.memName as m_memName
    		from board b left outer join member m on b.bWriter=m.memNum
    		order by b.bRef desc,b.bRefOrder asc) where b_num>=#{contentStartNum} and b_num<![CDATA[ <= ]]>#{contentLastNum}
    	</select>

     

    >> resultMap

    ▷ type : CRUD 의 resultType 과 같은 속성이다. ( resultType 설정을 resultMap 에게 넘겼다. )

    select 를 List 로 가져올 때 List 의 T객체를 type으로 설정하면 알아서 List 로 넣어준다.

     

    ▷ <id> : 튜플들간의 고유한 번호를 가져올 때, result 처럼 매핑한다는건 똑같다.

     

    ▷ <result> : 컬럼과 멤버변수를 매핑

    • column : CRUD 에서 as(별칭) 사용할 경우 resultMap의 column에도 반영해야 한다.
    • property : 매핑할 멤버변수

     

    ▷ <association> : 1:1관계의 참조변수를 매핑

    • resultMap : CRUD 와 마찬가지로 사용하여 매핑을 넘길 수 있다.
                     이 태그안에서 바로 매핑 가능하다.

                     

    아래처럼 여러곳에서 공통적으로 매핑해야 할 때 resultMap 따로 만들어 사용한다.

    	<!-- 게시물 리스트 resultMap -->
    	<resultMap id="selectListMap" type="boardA">
    		<id property="bNum" column="b_num"/>
    		<result property="bTitle" column="b_title"/>
    		<result property="bView" column="b_view"/>
    		<result property="bRef" column="b_ref"/>
    		<result property="bStep" column="b_step"/>
    		<result property="bRefOrder" column="b_refOrder"/>
    		<result property="bAnswerCnt" column="b_answerCnt"/>
    		<result property="bParentNum" column="b_parentNum"/>
    		<result property="bDeleteflag" column="b_deleteflag"/>
    		<result property="bRegdate" column="b_regdate"/>
    		<association property="bWriter" column="m_memNum" javaType="memberA" resultMap="memberResult"/>
    	</resultMap>
    	
    	<!-- 게시물 상세보기 resultMap : bContent 포함 -->
    	<resultMap id="selectMap" type="boardA">
    		<id property="bNum" column="b_num"/>
    		<result property="bTitle" column="b_title"/>
    		<result property="bContent" column="b_content"/>
    		<result property="bView" column="b_view"/>
    		<result property="bRef" column="b_ref"/>
    		<result property="bStep" column="b_step"/>
    		<result property="bRefOrder" column="b_refOrder"/>
    		<result property="bAnswerCnt" column="b_answerCnt"/>
    		<result property="bParentNum" column="b_parentNum"/>
    		<result property="bDeleteflag" column="b_deleteflag"/>
    		<result property="bRegdate" column="b_regdate"/>
    		<association property="bWriter" column="m_memNum" javaType="memberA" resultMap="memberResult"/>
    	</resultMap>

     

    공통으로 사용할 resultMap 을 따로 뺐다.

    	<!-- board resultMap의 공통 member select -->
    	<resultMap type="memberA" id="memberResult">
    		<id property="memNum" column="m_memNum"/>
    		<result property="memName" column="m_memName"/>
    	</resultMap>

     

    댓글

Designed by Tistory.