-
[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>
'JAVA' 카테고리의 다른 글
[spring] Starter Project,Legacy Project : xml Mapper 설정 차이 (0) 2021.08.18 @Autowired @Resource @Inject (0) 2021.08.18 [spring] ORA-00911: invalid character 오류 (0) 2021.08.17 [ajax] 비동기 form 사용하기 (0) 2021.08.16 [spring] spring-boot : MVC 어노테이션(Mapper,Repository,Service,Controller) (0) 2021.08.16