lprod가 1이고 buyer가 n이야!!
buyer_SQL.xml
lprodVO가 buyerVO를 감싸 lprodVO에있는 buyerVO를 가져와서 buyerVO에 넣어
<?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">
<!-- list2를 위함 시작 -->
<resultMap type="lprodVO" id="lprodMap">
<result property="lprodId" column="LPROD_ID" />
<result property="lprodGu" column="LPROD_GU" />
<result property="lprodNm" column="LPROD_NM" />
<collection property="buyerVO" resultMap="buyerMap2"></collection>
</resultMap>
<resultMap type="buyerVO" id="buyerMap2">
<result property="buyerId" column="BUYER_ID" />
<result property="buyerLgu" column="BUYER_LGU" />
<result property="buyerName" column="BUYER_NAME" />
</resultMap>
<!-- list2를 위함 끝 -->
<!-- CLOB는 위에 처럼 처리를 해줘야함 / 하지만 VO는 String으로 씀-->
<select id="list2" resultMap="lprodMap">
SELECT B.BUYER_ID
, B.BUYER_NAME
, B.BUYER_LGU
, L.LPROD_ID
, L.LPROD_GU
, L.LPROD_NM
FROM BUYER B, LPROD L
WHERE B.BUYER_LGU = L.LPROD_GU
ORDER BY L.LPROD_GU ASC
</select>
</mapper>
list2.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>Insert title here</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="lprodVO" items="${list2}" varStatus="stat">
<!-- buyerVO.lprodVO : N에 대한 데이터 -->
<c:forEach var="buyerVO" items="${lprodVO.buyerVO}">
<c:set var="cnt" value="${i=i+1}" />
<tr>
<td>${cnt}</td>
<td>${buyerVO.buyerName}</td>
<td>${lprodVO.lprodGu}</td>
<td>${lprodVO.lprodNm}</td>
</tr>
</c:forEach>
</c:forEach>
</table>
</body>
</html>
dao
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<LprodVO> list2(){
return this.sqlSessionTemplate.selectList("buyer.list2");
}
}
serviceImpl
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<LprodVO> list2(){
return this.buyerDao.list2();
}
}
service
package kr.or.ddit;
import java.util.List;
public interface BuyerService {
//메소드 시그니처 처리
public List<LprodVO> list2();
}
controller
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 = "/list2")
public String list2(Model model) {
List<LprodVO> list2 = this.buyerService.list2();
model.addAttribute("list2", list2);
return "buyer/list2";
}
}