[spring] resultMap 사용하기
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>