JAVA

[spring] resultMap 사용하기

docc 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>