반응형
사전 준비
- 테이블 생성
--상품 정보
CREATE TABLE PRODUCT(
PRODUCT_ID VARCHAR2(10),
PNAME VARCHAR2(90),
UNIT_PRICE NUMBER,
DESCRIPTION VARCHAR2(3000),
MANUFACTURER VARCHAR2(90),
CATEGORY VARCHAR2(60),
UNITS_IN_STOCK NUMBER,
CONDITION VARCHAR2(60),
FILENAME VARCHAR2(1000),
QUANTITY NUMBER,
CONSTRAINT PK_PRODUCT_ID PRIMARY KEY(PRODUCT_ID)
);
- 편의성을 위해 진행
create or replace FUNCTION FN_GETCAMEL(COLUMN_NAME IN VARCHAR2)
RETURN VARCHAR2
IS
RSLT VARCHAR2(30);
BEGIN
--카멜표기로 변환(SITE_NUM -> siteNum)
SELECT LOWER(SUBSTR(REPLACE(INITCAP(COLUMN_NAME),'_'),1,1))
|| SUBSTR(REPLACE(INITCAP(COLUMN_NAME),'_'),2) INTO RSLT
FROM DUAL;
--리턴
RETURN RSLT;
END;
--구글 카멜변환(https://heavenly-appear.tistory.com/270)
SELECT COLUMN_NAME
, DATA_TYPE
, CASE WHEN DATA_TYPE='NUMBER' THEN 'private int ' || FN_GETCAMEL(COLUMN_NAME) || ';'
WHEN DATA_TYPE IN('VARCHAR2','CHAR') THEN 'private String ' || FN_GETCAMEL(COLUMN_NAME) || ';'
WHEN DATA_TYPE='DATE' THEN 'private Date ' || FN_GETCAMEL(COLUMN_NAME) || ';'
ELSE 'private String ' || FN_GETCAMEL(COLUMN_NAME) || ';'
END AS CAMEL_CASE
, '<result property="'||FN_GETCAMEL(COLUMN_NAME)||'" column="'||COLUMN_NAME||'"/>' RESULTMAP
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'PRODUCT'
AND USER = 'PC이름';
desc product;
쇼핑몰 시스템
- 자바빈 클래스가 되기 위한 조건
1. 프로퍼티(멤버변수, 필드)가 있어야 함
2. 기본 생성자(getter/setter 메소드)가 있어야 함
+기본 생성자 생성 단축키
더보기

1

1. Shift + Alt + S > Generate Constructors from Superclass 클릭 > 선택 후 진행
위의 방식대로
Getters and Setters 로 getter/setter를 생성할 수 있음
또한 Generate toString() 를 생성할 수 있음
- VO 생성
ProductVO.java
package kr.or.ddit.vo;
// 자바빈 클래스 : 프로퍼티(멤버변수, 필드), 기본생성자, getter/setter메소드
public class ProductVO {
// 프로퍼티
private String productId; // 상품 아이디
private String pname; // 상품 명
private double unitPrice; // 상품 가격
private String description; // 상품 설명
private String manufacturer; // 제조사
private String category; // 분류
private double unitsInStock; // 재고 수
private String condition; // 신상품 or 중고품 or 재생품
private String filename; // 이미지 파일명
private int quantity; // 상품을 장바구니에 담은 개수
// 기본 생성자
public ProductVO() {
}
// 생성자(상품 아이디, 상품 명, 상품 가격 초기화)
public ProductVO(String productId, String pname, int unitPrice) {
this.productId = productId;
this.pname = pname;
this.unitPrice = unitPrice;
}
// getter/setter
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public double getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(double unitPrice) {
this.unitPrice = unitPrice;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public double getUnitsInStock() {
return unitsInStock;
}
public void setUnitsInStock(double unitsInStock) {
this.unitsInStock = unitsInStock;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
@Override
public String toString() {
return "ProductVO [productId=" + productId + ", pname=" + pname + ", unitPrice=" + unitPrice + ", description="
+ description + ", manufacturer=" + manufacturer + ", category=" + category + ", unitsInStock="
+ unitsInStock + ", condition=" + condition + ", filename=" + filename + ", quantity=" + quantity + "]";
}
}
- Dao 생성
ProdutRepository.java
package kr.or.ddit.dao;
import java.util.ArrayList;
import java.util.List;
import kr.or.ddit.vo.ProductVO;
public class ProdutRepository {
// 싱글톤 패턴(공유, 객체가 1회 생성)
private static ProdutRepository instance = new ProdutRepository();
public static ProdutRepository getInstance() {return instance;}
//상품 목록을 저장할 리스트 작성(전역변수)
//인터페이스 : 팀장
//구현클래스 : 팀원들
private List<ProductVO> listOfProducts = new ArrayList<ProductVO>();
// 기본 생성자, 3개의 상품 정보를 설정
private ProdutRepository() {
// 스마트폰
ProductVO phone = new ProductVO("P1234", "iPhone 6s", 800000);
//상품 설명
phone.setDescription("4.7-inch, 1334x750 Renina HD display."
+ "8-megapixel iSight Camera");
//분류
phone.setCategory("Smart Phone");
//제조사
phone.setManufacturer("Apple");
//재고 수
phone.setUnitsInStock(1000);
//신상품 or 중고품 or 재생품
phone.setCondition("New");
//이미지 파일명
phone.setFilename("P1234.jpg");
//-------------------------------스마트폰 등록 끝--------------------------------
//-------------------------------노트북 등록 시작--------------------------------
ProductVO notebook = new ProductVO("P1235", "LG PC 그램", 1500000);
//상품 설명
notebook.setDescription("13.3-inch, IPS LED display, 5rd Generation"
+ "Intel Core processors");
//분류
notebook.setCategory("Notebook");
//제조사
notebook.setManufacturer("LG");
//재고 수
notebook.setUnitsInStock(1000);
//신상품 or 중고품 or 재생품
notebook.setCondition("Refurbished");
//이미지 파일명
notebook.setFilename("P1235.jpg");
//-------------------------------노트북 등록 끝--------------------------------
//-------------------------------태블릿 등록 시작--------------------------------
ProductVO tablet = new ProductVO("P1236", "Galaxy Tab S", 900000);
//상품 설명
tablet.setDescription("212.8*125.6*6.6m, Super AMOLED display, "
+ "Octa-Core processor");
//분류
tablet.setCategory("Tablet");
//제조사
phone.setManufacturer("Samsung");
//재고 수
tablet.setUnitsInStock(1000);
//신상품 or 중고품 or 재생품
tablet.setCondition("Old");
//이미지 파일명
tablet.setFilename("P1236.jpg");
//-------------------------------태블릿 등록 끝--------------------------------
// VO들이 모여서 VO List가 됨
listOfProducts.add(phone);
listOfProducts.add(notebook);
listOfProducts.add(tablet);
}
// SELECT * FROM PRODUCT
// 상품 목록
public List<ProductVO> getAllProducts(){
return listOfProducts;
}
}
+ Colletion 종류
- jsp 생성
<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<% //스크립틀릿
//ProductRepository() 생성자
//기본 생성자. 3개의 상품 정보를 설정.
//그런 후 Product 객체 타입의 List인 listOfProducts 변수에 저장
//ProductRepository productDAO = new ProductRepository();
ProductRepository productDAO = ProductRepository.getInstance();
// ProductVO 제네릭 List 타입의 객체로 모든 상품 목록을 할당함
List<ProductVO> productVOList = productDAO.getAllProducts();
out.print("<p>productVOList : " + productVOList + "</p>");
%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
+ 사용한 파일과 코드
더보기
down.zip
0.77MB
js와 css 파일을 따로 WebContent 안에 넣음
head와 title 사이에 아래 코드 추가
<!-- <link rel="stylesheet" -->
<!-- href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="/css/bootstrap.min.css" />
menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<nav class="navbar navbar-expand navbar-dart bg-dark">
<div class="container">
<div class="navbar-header">
<!-- 요청 URL : /welcome.jsp -->
<a class="navbar-brand" href="welcome.jsp">Home</a>
</div>
</div>
</nav>
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<footer class="container">
<p>©WebMarket</p>
</footer>
products.jsp
<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<% //스크립틀릿
//ProductRepository() 생성자
//기본 생성자. 3개의 상품 정보를 설정.
//그런 후 Product 객체 타입의 List인 listOfProducts 변수에 저장
//ProductRepository productDAO = new ProductRepository();
ProductRepository productDAO = ProductRepository.getInstance();
// ProductVO 제네릭 List 타입의 객체로 모든 상품 목록을 할당함
List<ProductVO> productVOList = productDAO.getAllProducts();
//out.print("<p>productVOList : " + productVOList + "</p>");
%>
<!DOCTYPE html>
<html>
<head>
<!-- <link rel="stylesheet" -->
<!-- href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="/css/bootstrap.min.css" />
<title></title>
</head>
<body>
<!-- include 액션 태그 -->
<jsp:include page="menu.jsp" />
<div class="jumbotron">
<div class="container">
<h1 class="display-3">상품 목록</h1>
</div>
</div>
<!-- 상품목록 출력 -->
<div class="container">
<div class="row" align="center">
<%
//productVOList : ProductVO타입 리스트 변수
for(ProductVO productVO : productVOList) {
%>
<div class="col-md-4"> <!-- 33% 정도의 영역 -->
<!-- /images/P1234.jpg -->
<img src="/images/<%=productVO.getFilename()%>"
style="width:100%;" alt="<%=productVO.getPname()%>" title="<%=productVO.getPname()%>"/>
<h3><%=productVO.getPname()%></h3>
<p><%=productVO.getDescription()%></p>
<p><%=productVO.getUnitPrice()%></p>
</div>
<%
}
%>
</div>
</div>
<jsp:include page="footer.jsp" />
</body>
</html>
- => JSTL 로 변경
<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 페이지 디렉티브 -->
<% //스크립틀릿
ProductRepository productDAO = ProductRepository.getInstance();
List<ProductVO> productVOList = productDAO.getAllProducts();
%>
<!-- java 객체 -> JSTL 변수 -->
<c:set var="productVOList" value="<%=productVOList%>" />
<!DOCTYPE html>
<html>
<head>
<!-- <link rel="stylesheet" -->
<!-- href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="/css/bootstrap.min.css" />
<title></title>
</head>
<body>
<!-- include 액션 태그 -->
<jsp:include page="menu.jsp" />
<div class="jumbotron">
<div class="container">
<h1 class="display-3">상품 목록</h1>
</div>
</div>
<!-- 상품목록 출력 -->
<div class="container">
<div class="row" align="center">
<c:forEach var="productVO" items="${productVOList}" varStatus="stat">
<div class="col-md-4">
<img src="/images/${productVO.filename}"
style="width:100%;" alt="${productVO.pname}" title="${productVO.pname}"/>
<h3>${productVO.pname}</h3>
<p>${productVO.description}</p>
<p>${productVO.unitPrice}</p>
</div>
</c:forEach>
</div>
</div>
<jsp:include page="footer.jsp" />
</body>
</html>
반응형
'스프링' 카테고리의 다른 글
[스프링] 7장 내장 객체, request 객체 (0) | 2024.04.01 |
---|---|
[스프링] 6.5장 과제 (0) | 2024.04.01 |
[스프링] 5장 디렉티브 (0) | 2024.03.28 |
[스프링] 4.5장 과제 (0) | 2024.03.28 |
[스프링] 4장 선언문, 표현문 (0) | 2024.03.27 |