1. Model
* 짚고 넘어갈 뽀인트
- xml에 sql문 구현(MyBatis 활용)
- DAO 클래스의 @Repository 어노테이션 처리. 스프링 컨테이너에서 자동 객체화 진행.
- SqlSession을 @Autowired 어노테이션 처리, 스프링 빈으로 생성된 객체 연결(Spring07MyshopApplication.java에서 설정한 @Bean을 연결 / #4-2 환경설정 참고).
- list() 메서드는 Map으로 담았다. 컬럼명과 컬럼데이터가 한번에 담기는 형태이다.
1) product.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">
<!-- product.xml -->
<!-- 실행할 sql문을 정의해놓은 파일(DAO클래스) -->
<!-- 종결문자 사용금지 -->
<mapper namespace="product">
<select id="list" resultType="java.util.Map">
SELECT product_code, product_name, description, price, filename, filesize
FROM product
ORDER BY product_code
</select>
</mapper>
2) productDAO.java
package kr.co.itwill.product;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository // 스프링 컨테이너에서 자동으로 객체화를 시켜줌
public class ProductDAO {
public ProductDAO() {
System.out.println("------ProductDAO() 객체 생성됨");
} // end
// 스프링 빈으로 생성된 객체를 가져와서 연결하기
@Autowired
SqlSession sqlSession;
// Spring07MyshopApplication.java에서 설정한 @Bean을 연결.
// 오류시 setSqlSession(), getSqlSession() 에러가 뜸.
// 우리는 이 sqlSession을 사용하여 MyBatis Framework로 DB 작업을 한다.
public List<Map<String, Object>> list() {
return sqlSession.selectList("product.list");
} // list() end
} // class end
2. View
* 짚고 넘어갈 뽀인트
- 검색창을 만들었지만 아직 구현하지 않았다
- ${list} 의 list가 담긴 값은 컨트롤러의 mav 로 담았다(이 때 컬럼명과 컬럼데이터가 동시에 들어온다).
- list의 각 행을 row에 하나씩 담으면서 컬럼명에 접근할 때 오라클DB는 컬럼을 모두 대문자로 치환하여 표기를 한다. 그래서 대문자로 접근을 해야 한다(오라클DB의 특징).
- jstl의 문법들은 익숙해져야한다!!!
- varStatus에 대한 접근은 새로 배운 것, 아래의 링크에서 알아보자.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list.jsp</title>
<link href="../css/main.css" rel="stylesheet" type="text/css">
</head>
<body>
<h3>상품 목록</h3>
<p>
<button type="button" onclick="location.href='write'">상품등록</button>
<button type="button" onclick="location.href='list'">상품전체목록</button>
</p>
<form method="post" action="search">
상품명 : <input type="text" name="product_name" value="${product_name}">
<input type="submit" value="검색">
</form>
<hr>
상품 개수 : ${fn:length(list)}
<br>
<table border="1">
<tr>
<c:forEach var="row" items="${list}" varStatus="vs">
<td>
<c:choose>
<c:when test="${row.FILENAME != '-'}">
<img src="/storage/${row.FILENAME}" width="100px">
</c:when>
<c:otherwise>
등록된 사진 없음!!<br>
</c:otherwise>
</c:choose>
<br>
상품명 : <a href="detail/${row.PRODUCT_CODE}">${row.PRODUCT_NAME}</a>
<br>
상품 가격 : <fmt:formatNumber value="${row.PRICE}" pattern="#,###"/>
</td>
<c:if test="${vs.count mod 5==0}">
<tr></tr>
</c:if>
</c:forEach>
</tr>
</table>
</body>
</html>
3. Controller
* 짚고 넘어갈 뽀인트
- 모든 뷰페이지가 product 폴더 내에 생성될 것이므로 클래스 위에 @RequestMapping 공통 선언!
- DAO 페이지의 객체를 @Autowired를 통해 자동 생성 / DAO 는 @Repository로 선언(1번 항목 참조).
- list 변수는 DAO의 list() 메서드를 실행.
package kr.co.itwill.product;
import java.io.File;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/product")
public class ProductCont {
public ProductCont() {
System.out.println("-----------ProductCont() 객체 생성됨");
} // end
@Autowired
ProductDAO productDao;
@RequestMapping("/list")
public ModelAndView list() {
ModelAndView mav = new ModelAndView();
mav.setViewName("product/list");
mav.addObject("list", productDao.list());
return mav;
} // list() end
} // class end
'⁂ MyBatis Framework > : 기본 익히기' 카테고리의 다른 글
[MyBatis3] #4-5 파일 업로드 및 댓글 게시판 만들기 : 검색 기능 넣기 (0) | 2022.11.11 |
---|---|
[MyBatis3] #4-4 파일 업로드 및 댓글 게시판 만들기 : 상품 등록 페이지 (0) | 2022.11.11 |
[MyBatis3] #4-2 파일 업로드 및 댓글 게시판 만들기 : 첫 페이지 만들기 (0) | 2022.11.10 |
[MyBatis3] #4-1 Spring Boot + MyBatis Framework 기반 파일 업로드 및 댓글 게시판 만들기 : 환경설정 (0) | 2022.11.10 |
[MyBatis3] #3 의존성 주입(POJO방식과 Bean방식) (0) | 2022.11.09 |