김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • http에러메세지
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • 풀스택
  • 코딩
  • 코딩공부 #자바공부
  • 백앤드
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 코딩공부
  • 자바
  • httperror
  • 자바공부
  • HTML공부
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • web.xml수정
  • 객체지향프로그래밍
  • ErrorPage
  • 프론트앤드
  • 개발자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ MyBatis Framework/: 기본 익히기

[MyBatis3] #4-3 파일 업로드 및 댓글 게시판 만들기 : 상품 목록 페이지

2022. 11. 11. 10:08

 

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에 대한 접근은 새로 배운 것, 아래의 링크에서 알아보자.

 

[JSTL core] [c:forEach] varStatus를 활용한 변수

forEach문은 아래와 같이 활용한다. // 반복해서 표시할 내용 혹은 반복할 구문 이 때, 상태용 변수를 status라고 지정했다면 아래와 같이 활용할 수 있다. ${status.current} 현재 for문의 해당하는 번호 ${

jetalog.net

<%@ 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
    '⁂ MyBatis Framework/: 기본 익히기' 카테고리의 다른 글
    • [MyBatis3] #4-5 파일 업로드 및 댓글 게시판 만들기 : 검색 기능 넣기
    • [MyBatis3] #4-4 파일 업로드 및 댓글 게시판 만들기 : 상품 등록 페이지
    • [MyBatis3] #4-2 파일 업로드 및 댓글 게시판 만들기 : 첫 페이지 만들기
    • [MyBatis3] #4-1 Spring Boot + MyBatis Framework 기반 파일 업로드 및 댓글 게시판 만들기 : 환경설정
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바