기록하는 코더

[Spring] Mybatis - resultMap 본문

JAVA/spring

[Spring] Mybatis - resultMap

damda_di 2023. 1. 31. 11:52

ResultMap

-> 복잡한 결과 매핑을 간편하게 만들어주기 위해 만들어진 태그
-> myBatis에서 제공하는 자동 매핑으로 해결이 어려운 경우를 위해 구조를 설계할 수 있도록 만들어짐

 

1 : N 의 관계에서
1 (부모) : N(자식)

부모테이블의 기본키가 자식 테이블의 외래키로 전이됨
자식테이블의 외래키가 부모 테이블의 기본키를 참조함

 


예제 코드(mapper.xml)

<!-- LPROD : ATTACH = 1 : N  -->
<resultMap type="lprodVO" id="lprodMap">
    <id property="lprodGu" column="LPROD_GU" />
    <result property="lprodId" column="LPROD_ID" />
    <result property="lprodNm" column="LPROD_NM" />
    <collection property="attachVOList" resultMap="attachMap"></collection>
</resultMap>	

<resultMap type="attachVO" id="attachMap">
    <id property="etpId" column="ETP_ID" />
    <result property="seq" column="SEQ" />
    <result property="filename" column="FILENAME" />
    <result property="filesize" column="FILESIZE" />
    <result property="thumbnail" column="THUMBNAIL" />
    <result property="regdate" column="REGDATE" />
</resultMap>
<!--  association 1:1관계에서
      collection  1:N 관계에서 사용 -->
      
      
<select id="detail" parameterType="lprodVO" resultMap="lprodMap">
    SELECT
            L.LPROD_ID,L.LPROD_GU, L.LPROD_NM,
            A.FILENAME,A.FILESIZE ,A.THUMBNAIL, A.REGDATE, A.ETP_ID
      FROM LPROD L LEFT OUTER JOIN ATTACH A ON(L.LPROD_GU = A.ETP_ID)
    WHERE L.LPROD_GU=#{lprodGu}
</select>

* resultMap을 등록한 뒤 resultMap에 등록한 resultMap의 id를 적어준다.
(예시 코드에서는 "lprodMap"을 사용)
* lprodVO 내에 있는 attachVOList를 가져오기 위해서 resultMap을 사용
* attachMap을 List 형태로 가져옴

* resultMap에 적힌 Key값으로 인해 resultMap을 통해서 POJO 클래스로 바인딩 된다.
* resultmap을 통해 데이터를 바인딩해준다고 이해했다.

* 바인딩 : 데이터 바인딩 이란 두 데이터 혹은 정보의 소스를 모두 일치시키는 기법
       즉 화면에 보이는 데이터와 브라우저 메모리에 있는 데이터를 일치시키는 기법

 

 

상세보기 Controller 창에서 

@GetMapping(value="/detail")
public String detail(@ModelAttribute LprodVO lprodVO,Model model) {
		
	// LprodVO : [lprodId:0, lprodGu:P404, lprodNm:null]
	log.info("LprodVO : " + lprodVO);
	LprodVO lprod = this.lprodService.detail(lprodVO);
	log.info("lprod : " + lprod);
	model.addAttribute("data",lprod);
	return "lprod/detail";
}

resultMap을 통해 바인딩하여 가져온 데이터를
LprodVO형태로 가져와서 사용할 수 있다.

 

 

List형태로 가져온 데이터는 <c:forEach> (반복문)를 이용해서 목록을 나열할 수 있다.

<c:forEach var="attachVO" items="${data.attachVOList}" varStatus="stat">
	<div class="card" style="width: 200px;">
	  <img src="/resources/upload/${attachVO.thumbnail}" class="card-img-top" 
		  title="${attachVO.thumbnail}" alt="${attachVO.thumbnail}">
	  <div class="card-body">
    	  <h5 class="card-title"></h5>
      	  <p class="card-text">파일크기:${attachVO.filesize}</p>
	  	  <a data-bs-toggle="modal" href="#modal-default" data-filename="${attachVO.filename}" 
	  		class="btn btn-outline-primary ">보기</a>
	  </div>
	</div>
</c:forEach>

 

 


참고링크 

'JAVA > spring' 카테고리의 다른 글

[Spring] 페이징 처리  (0) 2023.02.09
[Spring] form 태그 라이브러리  (0) 2023.02.06
[Spring] 파일 다운로드  (0) 2023.02.02
[Spring] ajax 데이터 처리  (0) 2023.02.02
[Spring] 파일업로드 MultipartFile  (0) 2023.01.27