Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pl/sql
- Oracle
- 비교표현식
- pagination
- javascript
- pymssql
- spring
- mybatis
- anaconda
- sqlMapClient
- ibatis
- java
- select문
- sql
- PYTHON
- pyqt
- DB 스케쥴러
- directivesTag
- Git
- JSP
- form
- sqlMapConfig
- form태그
- fastapi
- 파이썬
- 드라이브 연결
- eclipse
- androidstudio
- sqldeveloper
- error
Archives
- Today
- Total
기록하는 코더
[Spring] Mybatis - resultMap 본문
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 |