D+35::쇼핑몰_관리자작업
20220812_Fri
실습내용1)
- 상품등록 완료 후 다시 상품등록페이지로 이동
- 다음에 들어가야하는 ITEM_CODE를 조회한다.
EX) ITEM_004 로 나올 수 있도록- 상품이름,상품가격이 4개씩 한 줄에 등록할 수 있도록 상품목록페이지를 만든다.
- 상품을 클릭하면 상세페이지로 이동
--쇼핑몰테이블 생성하기
--1. 회원 테이블
CREATE TABLE SHOP_MEMBER(
MEM_ID VARCHAR2(100) PRIMARY KEY
, MEM_PW VARCHAR2(100) NOT NULL
, MEM_NAME VARCHAR2(100) NOT NULL
, GENDER VARCHAR2(10) -- MALE,FEMALE
, MEM_TELL VARCHAR2(100) -- INPUT 태그 하나로 만드세요 SELECT박스 없이!!
, MEM_ADDR VARCHAR2(100)
, ADDR_DETAIL VARCHAR2(100)
, IS_ADMIN VARCHAR2(10) DEFAULT 'N'-- Y,N
);
--쇼핑몰 회원 조회하기
SELECT * FROM SHOP_MEMBER;
--2. 상품 카테고리 테이블(소설,인터넷,경제,사회경제,예술문화...)
CREATE TABLE ITEM_CATEGORY(
CATE_CODE VARCHAR2(50) PRIMARY KEY
, CATE_NAME VARCHAR2(50) NOT NULL
);
SELECT CATE_CODE
, CATE_NAME
FROM ITEM_CATEGORY;
--카테고리 코드별 값 넣기(메뉴)
INSERT INTO ITEM_CATEGORY VALUES('CATE_001','소설');
INSERT INTO ITEM_CATEGORY VALUES('CATE_002','인터넷/IT');
INSERT INTO ITEM_CATEGORY VALUES('CATE_003','사회/경제');
INSERT INTO ITEM_CATEGORY VALUES('CATE_004','문화/예술');
--카테고리 조회하기(코드순서)
SELECT * FROM ITEM_CATEGORY
ORDER BY CATE_CODE;
--3. 상품 테이블
DROP TABLE SHOP_ITEM;
CREATE TABLE SHOP_ITEM(
ITEM_CODE VARCHAR2(50) PRIMARY KEY-- ITEM_001...
, ITEM_NAME VARCHAR2(100) NOT NULL
, ITEM_PRICE NUMBER NOT NULL
, ITEM_COMMENT VARCHAR2(100)
, ITEM_STOCK NUMBER DEFAULT 10
, CATE_CODE VARCHAR2(50) REFERENCES ITEM_CATEGORY (CATE_CODE) ON DELETE CASCADE --카테고리를 지우면 그 하위항목 모두 삭제됨.
);
DROP TABLE ITEM_CATEGORY;--테이블도 아이템카테고리(부모) 아래 SHOP_ITEM(자식)테이블을 먼저 지워야 삭제가능하다!!!
SELECT ITEM_CODE
, ITEM_NAME
, ITEM_PRICE
FROM SHOP_ITEM
ORDER BY ITEM_CODE DESC;
--아이템테이블 조회하기
SELECT * FROM SHOP_ITEM;
DELETE SHOP_ITEM;
--관리자 설정하기 아이디 '111'
UPDATE SHOP_MEMBER
SET
IS_ADMIN = 'Y'
WHERE MEM_ID = '111';
INSERT INTO SHOP_ITEM ( ITEM_CODE , ITEM_NAME , ITEM_PRICE , ITEM_COMMENT , CATE_CODE )
VALUES ('ITEM_003' , 'AA' , 1000 , 'DDD' , 'CATE_001' ) ;
--ITEM_CODE 조회하기
SELECT ITEM_CODE FROM SHOP_ITEM;
--SUBSTR(): 일부부만 조회하기 (글자잘라서)
--다음에 들어갈 ITEM_CODE를 조회하기 -> 예) ITEM_050 -> ITEM_051 로 조회하기
--테이블에 아무런 데이터가 없다면 조회했을 때 모두 빈값이 나온다.
SELECT SUBSTR(ITEM_CODE,6) FROM SHOP_ITEM;--'ITEM_CODE' 문자중 6번째 문자부터 조회한다.
SELECT TO_NUMBER(SUBSTR(ITEM_CODE,6)) AS ITEM_CODE FROM SHOP_ITEM;--TO_CHAR(),TO_NUMBER() : ()괄호안 데이터가 각각의 형태로 형변화된다.
SELECT MAX(TO_NUMBER(SUBSTR(ITEM_CODE,6))) + 1 FROM SHOP_ITEM;--NULL값: MAX(TO_NUMBER(SUBSTR(ITEM_CODE,6)))
--데이터가 하나도없으면 실행이 안된다.그래서 NVL()함수 사용해서 NULL값 없이 '0'값넣어주어시작하도록만든다.
SELECT NVL(MAX(TO_NUMBER(SUBSTR(ITEM_CODE,6))) , 0) + 1 FROM SHOP_ITEM;
SELECT 'ITEM_'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(ITEM_CODE,6))) , 0) + 1, 3 , 0) AS ITEM_CODE FROM SHOP_ITEM;--ITEM_001
--<참고>
--'3'을 5자리로 만드는데 빈값을 LPAD(왼쪽으로) '0'으로 채워준다.
SELECT LPAD(3,5,0) FROM DUAL;--00003
--'A'을 7자리로 만드는데 빈값을 RPAD(오른쪽으로) '#'으로 채워준다.
SELECT RPAD('A',7,'#') FROM DUAL;--A######
--문자열 연결하기
SELECT 'A' || 'B' FROM SHOP_ITEM;--AB
SELECT ITEM_CODE
, ITEM_NAME
, ITEM_PRICE
, ITEM_COMMENT
, CATE_CODE
FROM SHOP_ITEM
WHERE ITEM_CODE = 'ITEM_007';
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
.itemDiv{/ 자식태그 /
background-color: #EAF6F6;
flex-basis: 20%;/ 차곡차곡정렬될 때 여백을 말함. 한줄에 5개씩 나온다./
text-align: center;
margin-bottom: 30px;
height: 260px;
font-size: 16px;
}
.itemDiv img:hover{/ 마우스올리면 /
/ 투명도 /
opacity: 0.7;
}
.btnDiv{
text-align: center;
padding: 3px;
margin-top: 15px;
font-size: 20px;
}
.btn{
font-size: 17px;
height: 40px;
background-color: #D3EBCD;
}
.btn:hover {
cursor:pointer;
background-color: #C7D36F;
font-family: 'MICEGothic';
}
<div class="itemContainerDiv">
<c:forEach var="item" items="${itemList}" >
<!-- div태그 하나가 상품 한개 -->
<div class="itemDiv">
<div>
<a href='itemDetail.it?itemCode=${item.itemCode}'>
<img width="150px" height="200px" src="images/가장 빨리 만나는 자바_메인.jpg">
</a>
</div>
<div>${item.itemName}</div>
<div>${item.itemPrice}</div>
</div>
</c:forEach>
</div>
<resultMap type="dto.ItemDTO" id="item">
<id column="ITEM_CODE" property="itemCode"/>
<result column="ITEM_NAME" property="itemName"/>
<result column="ITEM_PRICE" property="itemPrice"/>
<result column="ITEM_COMMENT" property="itemComment"/>
<result column="ITEM_STOCK" property="itemStock"/>
<result column="CATE_CODE" property="cateCode"/>
</resultMap>
<!-- 상품카테고리 조회 -->
<select id="selectCategoryList" resultMap="category">
SELECT CATE_CODE
, CATE_NAME
FROM ITEM_CATEGORY
</select>
INSERT INTO SHOP_ITEM (
ITEM_CODE
, ITEM_NAME
, ITEM_PRICE
, ITEM_COMMENT
, CATE_CODE
) VALUES (
(SELECT 'ITEM_'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(ITEM_CODE,6))) , 0) + 1, 3 , 0) AS ITEM_CODE FROM SHOP_ITEM)
, #{itemName}
, #{itemPrice}
, #{itemComment}
, #{cateCode}
)
SELECT ITEM_CODE
, ITEM_NAME
, ITEM_PRICE
FROM SHOP_ITEM
ORDER BY ITEM_CODE DESC
SELECT ITEM_CODE
, ITEM_NAME
, ITEM_PRICE
, ITEM_COMMENT
, CATE_CODE
FROM SHOP_ITEM
WHERE ITEM_CODE = #{itemCode}
package service;
//인터페이스
//(mapper에서 만든 쿼리문)메소드 기능 정의하는 곳이다!!!
import java.util.List;
import dto.CategoryDTO;
import dto.ItemDTO;
public interface ItemService {
//상품카테고리 목록 조회
List selectCategoryList();
//상품등록
void insertItem(ItemDTO itemDTO);
//상품카테고리 목록 조회
List selectItemList();
//상세보기
ItemDTO selectDetailItem(String itemCode);
}
package service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import dto.CategoryDTO;
import dto.ItemDTO;
import sqlmap.SqlSessionManager;
//쿼리작업하는 곳
public class ItemServiceImpl implements ItemService{//서비스를 구현하겠다.
//쿼리 실행하는 객체
SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();
SqlSession sqlSession = sqlSessionFactory.openSession();
//카테고리 목록 조회
@Override
public List<CategoryDTO> selectCategoryList() {
List<CategoryDTO> result = sqlSession.selectList("itemMapper.selectCategoryList");
sqlSession.commit();
return result;
}
//상품등록
@Override
public void insertItem(ItemDTO itemDTO) {
sqlSession.insert("itemMapper.insertItem",itemDTO );
sqlSession.commit();
}
//상품등록 목록 조회
@Override
public List<ItemDTO> selectItemList() {
List<ItemDTO> result = sqlSession.selectList("itemMapper.selectItemList");
sqlSession.commit();
return result;
}
//상세보기
@Override
public ItemDTO selectDetailItem(String itemCode) {
ItemDTO result = sqlSession.selectOne("itemMapper.selectDetailItem", itemCode);
sqlSession.commit();
return result;
}
}
package controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dto.ItemDTO;
import service.ItemService;
import service.ItemServiceImpl;
@WebServlet("*.it")
public class ItemController extends HttpServlet {
private static final long serialVersionUID = 1L;
private ItemService itemService = new ItemServiceImpl();
public ItemController() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글 인코딩 처리
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = requestURI.substring(contextPath.length());
System.out.println("command = " + command);
String page = "jsp/template/template.jsp";//빈값이면 인덱스파일로 이동 > itemList.it 이동
String contentPage="";
boolean isRediect = false;
//상품 록록 페이지(첫화면)
if(command.equals("/itemList.it")) {
// 1)List itemList = itemService.selectItemList();;
// 2)request.setAttribute("itemList", itemList);
// 3)위에 두 줄 한 줄로 요약
request.setAttribute("itemList", itemService.selectItemList());
contentPage ="item/item_list1.jsp";
}
//게시글 상세페이지
else if(command.equals("/itemDetail.it")) {
String itemCode = request.getParameter("itemCode");
ItemDTO itemList = itemService.selectDetailItem(itemCode);
System.out.println(itemList.getItemCode());
request.setAttribute("itemList",itemList);
contentPage ="item/item_detail.jsp";
}
request.setAttribute("contentPage", contentPage);
//페이지이동에 사용되는 if문
if(isRediect) {
response.sendRedirect(page);
}
else {
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
.itemDetailDiv{
display: inline-block;
}
.container,.commentDiv,.addDiv{
background-color: white;
width: 100%
}