1:n관계 list 뽑기

조수경·2022년 2월 7일
0

Spring

목록 보기
14/43

buyer가 1이고 prod가 n인 상황
즉 buyer가 주인공!!

ProdVO

package kr.or.ddit;

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

import lombok.Data;

//자바빈 클래스
public class ProdVO {
	private String prodId;
	private String prodName;
	private String prodLgu;
	private String prodBuyer;
	private int prodCost;
	private int prodPrice;
	private int prodSale;
	private String prodOutline;
	//오라클 CLOB 자료형일지라도 String 타입으로 선언
	private String prodDetail;
	private String prodImg;
	private int prodTotalstock;
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date prodInsdate;
	private int prodProperstock;
	private String prodSize;
	private String prodColor;
	private String prodDelivery;
	private String prodUnit;
	private int prodQtyin;
	private int prodQtysale;
	private int prodMileage;
	
	public String getProdId() {
		return prodId;
	}
	public void setProdId(String prodId) {
		this.prodId = prodId;
	}
	public String getProdName() {
		return prodName;
	}
	public void setProdName(String prodName) {
		this.prodName = prodName;
	}
	public String getProdLgu() {
		return prodLgu;
	}
	public void setProdLgu(String prodLgu) {
		this.prodLgu = prodLgu;
	}
	public String getProdBuyer() {
		return prodBuyer;
	}
	public void setProdBuyer(String prodBuyer) {
		this.prodBuyer = prodBuyer;
	}
	public int getProdCost() {
		return prodCost;
	}
	public void setProdCost(int prodCost) {
		this.prodCost = prodCost;
	}
	public int getProdPrice() {
		return prodPrice;
	}
	public void setProdPrice(int prodPrice) {
		this.prodPrice = prodPrice;
	}
	public int getProdSale() {
		return prodSale;
	}
	public void setProdSale(int prodSale) {
		this.prodSale = prodSale;
	}
	public String getProdOutline() {
		return prodOutline;
	}
	public void setProdOutline(String prodOutline) {
		this.prodOutline = prodOutline;
	}
	public String getProdDetail() {
		return prodDetail;
	}
	public void setProdDetail(String prodDetail) {
		this.prodDetail = prodDetail;
	}
	public String getProdImg() {
		return prodImg;
	}
	public void setProdImg(String prodImg) {
		this.prodImg = prodImg;
	}
	public int getProdTotalstock() {
		return prodTotalstock;
	}
	public void setProdTotalstock(int prodTotalstock) {
		this.prodTotalstock = prodTotalstock;
	}
	public Date getProdInsdate() {
		return prodInsdate;
	}
	public void setProdInsdate(Date prodInsdate) {
		this.prodInsdate = prodInsdate;
	}
	public int getProdProperstock() {
		return prodProperstock;
	}
	public void setProdProperstock(int prodProperstock) {
		this.prodProperstock = prodProperstock;
	}
	public String getProdSize() {
		return prodSize;
	}
	public void setProdSize(String prodSize) {
		this.prodSize = prodSize;
	}
	public String getProdColor() {
		return prodColor;
	}
	public void setProdColor(String prodColor) {
		this.prodColor = prodColor;
	}
	public String getProdDelivery() {
		return prodDelivery;
	}
	public void setProdDelivery(String prodDelivery) {
		this.prodDelivery = prodDelivery;
	}
	public String getProdUnit() {
		return prodUnit;
	}
	public void setProdUnit(String prodUnit) {
		this.prodUnit = prodUnit;
	}
	public int getProdQtyin() {
		return prodQtyin;
	}
	public void setProdQtyin(int prodQtyin) {
		this.prodQtyin = prodQtyin;
	}
	public int getProdQtysale() {
		return prodQtysale;
	}
	public void setProdQtysale(int prodQtysale) {
		this.prodQtysale = prodQtysale;
	}
	public int getProdMileage() {
		return prodMileage;
	}
	public void setProdMileage(int prodMileage) {
		this.prodMileage = prodMileage;
	}
	@Override
	public String toString() {
		return "ProdVO [prodId=" + prodId + ", prodName=" + prodName + ", prodLgu=" + prodLgu + ", prodBuyer="
				+ prodBuyer + ", prodCost=" + prodCost + ", prodPrice=" + prodPrice + ", prodSale=" + prodSale
				+ ", prodOutline=" + prodOutline + ", prodDetail=" + prodDetail + ", prodImg=" + prodImg
				+ ", prodTotalstock=" + prodTotalstock + ", prodInsdate=" + prodInsdate + ", prodProperstock="
				+ prodProperstock + ", prodSize=" + prodSize + ", prodColor=" + prodColor + ", prodDelivery="
				+ prodDelivery + ", prodUnit=" + prodUnit + ", prodQtyin=" + prodQtyin + ", prodQtysale=" + prodQtysale
				+ ", prodMileage=" + prodMileage + "]";
	}
	
	
}

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>
			<td>번호</td>
			<td>거래처명</td>
			<td>상품명</td>
			<td>가격</td>
		</tr>
		<c:set var="i" value="0" />
		<!-- buyerVO : 1에 대한 데이터 -->
		<c:forEach var="buyerVO" items="${list}" varStatus="stat">
		<!-- buyerVO.prodVO : N에 대한 데이터 -->
			<c:forEach var="prodVO" items="${buyerVO.prodVO}">
			<c:set var="cnt" value="${i=i+1}" />
				<tr>
					<td>${cnt}</td>
					<td>${buyerVO.buyerName}</td>
					<td>${prodVO.prodName}</td>
					<td>${prodVO.prodSale}</td>
				</tr>
			</c:forEach>
		</c:forEach>
	</table>

</body>
</html>

buyer_SQL.xml

sql컬럼(column)에 있는 BUYER_ID를 buyerVO에 있는 buyerId(property) 매핑해줘!!
collection : 주인공 buyerprod를 받기 위해서 작성해주기!!!
CLOB 타입javaType="java.lang.String" jdbcType="CLOB" 명시해조야댐

<?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">
  
  <!-- result라 써도 무방하지만 id라고 쓴것은 기본키임을 밝힌것  -->
<mapper namespace="buyer">
	<!-- list를 위함 시작 -->
	<resultMap type="buyerVO" id="buyerMap">
		<id property="buyerId" column="BUYER_ID" />
		<result property="buyerName" column="BUYER_NAME" />
		<collection property="prodVO" resultMap="prodMap">
		</collection>
	</resultMap>

	<resultMap type="prodVO" id="prodMap">
		<result property="prodBuyer" column="PROD_BUYER" />
		<result property="prodId" column="PROD_ID" />
		<result property="prodName" column="PROD_NAME" />
		<result property="prodSale" column="PROD_SALE" />
		<result property="prodDetail" column="PROD_DETAIL" javaType="java.lang.String" jdbcType="CLOB" />
	</resultMap>
	<!-- list를 위함 끝 -->
	
	
<!-- CLOB는 위에 처럼 처리를 해줘야함 / 하지만 VO는 String으로 씀-->

	<select id="list" resultMap="buyerMap">
		SELECT B.BUYER_ID
		     , B.BUYER_NAME
		     , P.PROD_ID
		     , P.PROD_NAME
		     , P.PROD_BUYER
		     , P.PROD_SALE
		     , P.PROD_DETAIL
		FROM   BUYER B, PROD P
		WHERE  B.BUYER_ID = P.PROD_BUYER
		ORDER BY BUYER_ID ASC
	</select>

</mapper>

BuyerDao.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;

//mapper xml을 실행해주는 클래스.
//어노테이션을 붙여서 이 클래스는 데이터에 접근하는 클래스야~
//Spring에게 알려줘!
//Spring이 데이터를 관리하는 클래스라고 인지해서 자바 빈(java bean)으로 등록해서 관리

@Repository  
//자바빈으로 관리(저장소)해줘! 일반 클래스 아니야~ 서블릿으로 컴팻스트해서 자바빈 접근을 해줌

public class BuyerDao {
		//sqlSessionTempate 사용
		/*
		 * new 키워드를 통해 직접 생성 안했는데 객체가 생성이 됨!! 싱기방구 
		 * 이게 바로 의존성 주입임!!!(Dependency Injection - DI)
		 * DI로 주입 받는 것임
		 * 스프링이 이미 만들어 놓은 sqlSessionTemplate 타입 객체를 BookDao 객체에 주입
		 * 이 과정은 자동으로 스프링에서 실행되며, 개발자가 직접 객체를 생성하지 않음
		 * (이것이 바로 IoC: 제어의 역전)
		 */
		
		@Autowired//자동 주입
		SqlSessionTemplate sqlSessionTemplate;//미리 만들어 놓은 백신(root컨택스트에서 온것)
		//거래처 별 상품 목록
		public List<BuyerVO> list(){
			//namespace.id
			return this.sqlSessionTemplate.selectList("buyer.list");
		}

BuyerServiceImpl.java

package kr.or.ddit;

import java.util.List;

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

//어노테이션.. 스프링에게 이 클래스는 서비스 클래스임을 알려줌
//스프링이 자바 빈(java bean)으로 등록하여 관리
@Service
public class BuyerServiceImpl implements BuyerService {
	//DI(의존성 주입)
	@Autowired
	BuyerDao buyerDao;

	//거래처 별 상품 목록
	//메소드 재정의
	@Override
	public List<BuyerVO> list(){
		return this.buyerDao.list();
	}

}

BuyerService.java

package kr.or.ddit;

import java.util.List;

public interface BuyerService {
	//메소드 시그니처 처리
	public List<BuyerVO> list();
	
	public List<LprodVO> list2();
}

BuyerController.java

package kr.or.ddit;
//컨트롤러 어노테이션(Annotation)
//어노테이션이 있는 클래스
//스프링 프레임워크(디자인 패턴 + 라이브러리 집합)기
//웹 브라우저(크롬)의 요청(request)을 받아들이는 컨트롤러라고
//인지해서 자바 빈(java bean)으로 등록해서 관리

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="/buyer")
@Controller // 컨트롤러 지정
public class BuyerController {
	//DI(의존성 주입), IoC(제어의 역전)
	@Inject
	BuyerService buyerService;
	
	@RequestMapping(value="/list")
	public String list(Model model) {
		
		List<BuyerVO> list = this.buyerService.list();
		
		model.addAttribute("list", list);
		
		//뷰 경로 지정하는 forward 방식
		return "buyer/list";
	}

	
}
profile
신입 개발자 입니다!!!

0개의 댓글