스프링 24강 - ResultMap으로 1:N 관계 처리(Lprod, Buyer)

voilà!·2022년 2월 9일
0

JSP 스프링

목록 보기
24/31

XML(Mybatis)에서 resultMap형태로 처리하는 방법

  • 기본키는 id 아닌 컬럼은 result에
  • property :vo의 멤버변수명
  • column : select문의 컬럼명
  • 1:1 관계는 <association>
  • 1:N 관계는 <collection>

예시) LPROD(1)와 BUYER(N) 관계에서 buyerVO를 list로 반환하기

1. <select> 작성

<select id="아이디" resultMap="반환할 VO객체의 Map명">
	조회할 쿼리문 작성
</select>

2. resultMap 작성

	<resultMap type="<select>에서 작성한 VO객체명" id="<select>에서 작성한 resultMap명">
		<result property="VO객체의 멤버변수명" column="컬럼명" />
		<collection property="1:N 관계 중 N에 해당하는 VO객체명" resultMap="반환할 VO객체의 map명">
		</collection>
	</resultMap>

3. 1:N 관계 속성 중 N에 해당하는 resultMap 작성

	<resultMap type="1:N 관계 중 N에 해당하는 VO객체명" id="<collection>에서 작성한 resultMap명">
		<result property="VO객체의 멤버변수명" column="컬럼명"/>
	</resultMap>

1. VO

LprodVO.java

package kr.or.ddit;

import java.util.List;

public class LprodVO {
	private int lprodId;
	private String lprodGu;
	private String lprodNm;
	
	//Lprod : Buyer = 1 : N 관계
	private List<BuyerVO> BuyerVO;

	public int getLprodId() {
		return lprodId;
	}

	public void setLprodId(int lprodId) {
		this.lprodId = lprodId;
	}

	public String getLprodGu() {
		return lprodGu;
	}

	public void setLprodGu(String lprodGu) {
		this.lprodGu = lprodGu;
	}

	public String getLprodNm() {
		return lprodNm;
	}

	public void setLprodNm(String lprodNm) {
		this.lprodNm = lprodNm;
	}

	public List<BuyerVO> getBuyerVO() {
		return BuyerVO;
	}

	public void setBuyerVO(List<BuyerVO> buyerVO) {
		BuyerVO = buyerVO;
	}

	@Override
	public String toString() {
		return "LprodVO [lprodId=" + lprodId + ", lprodGu=" + lprodGu + ", lprodNm=" + lprodNm + ", BuyerVO=" + BuyerVO
				+ "]";
	}
	
	
}

BuyerVO.java

package kr.or.ddit;

import java.util.List;

//자바빈 클래스
public class BuyerVO {
	//멤버변수
	private String buyerId;
	private String buyerName;
	private String buyerLgu;
	private String buyerBank;
	private String buyerBankno;
	private String buyerBankname;
	private String buyerZip;
	private String buyerAdd1;
	private String buyerAdd2;
	private String buyerComtel;
	private String buyerFax;
	private String buyerMail;
	private String buyerCharger;
	private String buyerTelext;
	
	
	//Buyer : ProdVO = 1: N 관계
	private List<ProdVO> ProdVO;
	
	//getter/setter 메소드
	public String getBuyerId() {
		return buyerId;
	}
	public void setBuyerId(String buyerId) {
		this.buyerId = buyerId;
	}
	public String getBuyerName() {
		return buyerName;
	}
	public void setBuyerName(String buyerName) {
		this.buyerName = buyerName;
	}
	public String getBuyerLgu() {
		return buyerLgu;
	}
	public void setBuyerLgu(String buyerLgu) {
		this.buyerLgu = buyerLgu;
	}
	public String getBuyerBank() {
		return buyerBank;
	}
	public void setBuyerBank(String buyerBank) {
		this.buyerBank = buyerBank;
	}
	public String getBuyerBankno() {
		return buyerBankno;
	}
	public void setBuyerBankno(String buyerBankno) {
		this.buyerBankno = buyerBankno;
	}
	public String getBuyerBankname() {
		return buyerBankname;
	}
	public void setBuyerBankname(String buyerBankname) {
		this.buyerBankname = buyerBankname;
	}
	public String getBuyerZip() {
		return buyerZip;
	}
	public void setBuyerZip(String buyerZip) {
		this.buyerZip = buyerZip;
	}
	public String getBuyerAdd1() {
		return buyerAdd1;
	}
	public void setBuyerAdd1(String buyerAdd1) {
		this.buyerAdd1 = buyerAdd1;
	}
	public String getBuyerAdd2() {
		return buyerAdd2;
	}
	public void setBuyerAdd2(String buyerAdd2) {
		this.buyerAdd2 = buyerAdd2;
	}
	public String getBuyerComtel() {
		return buyerComtel;
	}
	public void setBuyerComtel(String buyerComtel) {
		this.buyerComtel = buyerComtel;
	}
	public String getBuyerFax() {
		return buyerFax;
	}
	public void setBuyerFax(String buyerFax) {
		this.buyerFax = buyerFax;
	}
	public String getBuyerMail() {
		return buyerMail;
	}
	public void setBuyerMail(String buyerMail) {
		this.buyerMail = buyerMail;
	}
	public String getBuyerCharger() {
		return buyerCharger;
	}
	public void setBuyerCharger(String buyerCharger) {
		this.buyerCharger = buyerCharger;
	}
	public String getBuyerTelext() {
		return buyerTelext;
	}
	public void setBuyerTelext(String buyerTelext) {
		this.buyerTelext = buyerTelext;
	}
	
	public List<ProdVO> getProdVO() {
		return ProdVO;
	}
	public void setProdVO(List<ProdVO> prodVO) {
		ProdVO = prodVO;
	}
	
	@Override
	public String toString() {
		return "BuyerVO [buyerId=" + buyerId + ", buyerName=" + buyerName + ", buyerLgu=" + buyerLgu + ", buyerBank="
				+ buyerBank + ", buyerBankno=" + buyerBankno + ", buyerBankname=" + buyerBankname + ", buyerZip="
				+ buyerZip + ", buyerAdd1=" + buyerAdd1 + ", buyerAdd2=" + buyerAdd2 + ", buyerComtel=" + buyerComtel
				+ ", buyerFax=" + buyerFax + ", buyerMail=" + buyerMail + ", buyerCharger=" + buyerCharger
				+ ", buyerTelext=" + buyerTelext + ", ProdVO=" + ProdVO + "]";
	}
	
	
	
		
}

2. XML

lprod_SQL.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="lprod">
	<resultMap type="lprodVO" id="lprodMap">
		<result property="lprodGu" column="LPROD_GU" />
		<result property="lprodNm" column="LPROD_NM" />
		<collection property="buyerVO" resultMap="buyerMap">
		</collection>
	</resultMap>

	<resultMap type="buyerVO" id="buyerMap">
		<result property="buyerId" column="BUYER_ID"/>
		<result property="buyerName" column="BUYER_NAME"/>
	</resultMap>
	
	<select id="list" resultMap="lprodMap">
		SELECT L.LPROD_GU
		    , L.LPROD_NM
		    , B.BUYER_ID
		    , B.BUYER_NAME
		FROM LPROD L, BUYER B
		WHERE L.LPROD_GU = B.BUYER_LGU
		ORDER BY LPROD_GU ASC
	</select>
	
</mapper>

3. Dao

LprodDao.java

package kr.or.ddit;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class LprodDao {
	
	@Autowired
	SqlSessionTemplate sqlSessionTemplate;
	
	public List<LprodVO> list(){
		return this.sqlSessionTemplate.selectList("lprod.list");
	}
	
	
}

4. Service

LprodService.java

package kr.or.ddit;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class LprodDao {
	
	@Autowired
	SqlSessionTemplate sqlSessionTemplate;
	
	public List<LprodVO> list(){
		return this.sqlSessionTemplate.selectList("lprod.list");
	}
	
	
}

LprodServiceImpl.java

package kr.or.ddit;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class LprodServiceImpl implements LprodService {
	@Autowired
	LprodDao lprodDao;
	
	@Override
	public List<LprodVO> list(){
		return this.lprodDao.list();
	}
}

5. Controller

LprodController.java

package kr.or.ddit;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping(value = "/lprod")
@Controller
public class LprodController {
	@Inject
	LprodService lprodService;
	
	@RequestMapping(value = "/list")
	public String list(Model model) {
		List<LprodVO> list = this.lprodService.list();
		model.addAttribute("list", list);
		return "lprod/list";
	}
}

6. JSP

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>분류번호 별 거래처 목록</title>
</head>
<body>
<table border="1">
	<tr>
		<th>번호</th>
		<th>분류번호</th>
		<th>분류명</th>
		<th>거래처번호</th>
		<th>거래처명</th>
	</tr>
	<c:forEach var="lprodVO" items="${list}">
		<c:forEach var="buyerVO" items="${lprodVO.buyerVO}">
		<c:set var="cnt" value="${i=i+1}" />
	<tr>
		<td>${cnt}</td>
		<td>${lprodVO.lprodGu}</td>
		<td>${lprodVO.lprodNm}</td>
		<td>${buyerVO.buyerId}</td>
		<td>${buyerVO.buyerName}</td>
	</tr>
		</c:forEach>
	</c:forEach>
</table>

</body>
</html>

0개의 댓글