오봉이와 함께하는 개발 블로그

Spring - 간단한 예제 본문

BE/Spring

Spring - 간단한 예제

오봉봉이 2022. 1. 11. 11:40
728x90

Java

Controller

package com.spring_mvc.mybatis.controller;

import com.spring_mvc.mybatis.model.ProductVo;
import com.spring_mvc.mybatis.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;

@Controller
public class ProductController {
    @Autowired
    ProductService service;
    // 실행 시 index페이지 열기
    @RequestMapping("/")
    public String index(Model model) {
        return "index";
    }
    // 전체 상품 조회
    @RequestMapping("/product/listAllProduct")
    public String listAllProduct(Model model) {
        ArrayList<ProductVo> prdList = service.listAllProduct();
        model.addAttribute("prdList", prdList);
        System.out.println(prdList);
        return "product/productListView";
    }
    // 상품 등록폼으로 이동
    @RequestMapping("/product/newProductForm")
    public String newProductForm() {
        return "product/newProductForm";
    }
    // 상품 등록
    @RequestMapping("/product/insertProduct")
    public String insertProduct(ProductVo prd) {
        System.out.println(prd.getPrdNo());
        service.insertProduct(prd);
        return "redirect:/product/listAllProduct";
    }
    // 상품 상세 정보 페이지로 이동
    @RequestMapping("/product/detailViewProduct/{prdNo}")
    public String productDetailView(@PathVariable String prdNo, Model model) {
        // 상품 번호 전달하고, 해당 상품 정보 받아오기
        ProductVo prd = service.detailViewProduct(prdNo);
        model.addAttribute("prd", prd);
        return "product/productDetailView"; // 상품 상세 정보 뷰 페이지
    }
    // 상품 정보 수정 화면으로 이동(수정하기 위해 상품 상세 정보를 화면에 먼저 출력)
    @RequestMapping("/product/updateProductForm/{prdNo}")
    public String updateProductForm(@PathVariable String prdNo, Model model) {
        // 상품 번호 전달하고, 해당 상품 정보 받아오기
        ProductVo prd = service.detailViewProduct(prdNo); // 상세 상품 조회 메소드 그대로 사용
        model.addAttribute("prd", prd);
        return "product/updateProductForm";
    }
    // 상품 정보 수정 : 수정된 상품 정보를 DB에 저장
    @RequestMapping("/product/updateProduct")
    public String detailViewProduct(ProductVo prd) {
        service.updateProduct(prd);
        return "redirect:/product/listAllProduct";  // 전체 상품 조회 페이지로 포워딩
    }
    @RequestMapping("/product/deleteProduct/{prdNo}")
    public String deleteProduct(@PathVariable String prdNo) {
        service.deleteProduct(prdNo);
        System.out.println(prdNo);
        return "redirect:/product/listAllProduct";
    }
}

IProductDAO

package com.spring_mvc.mybatis.dao;

import com.spring_mvc.mybatis.model.ProductVo;
import java.util.ArrayList;

public interface IProductDAO {
    ArrayList<ProductVo> listAllProduct(); // 전체 상품 조회
    void insertProduct(ProductVo productVo); // 상품 정보 등록
    void updateProduct(ProductVo productVo); // 상품 정보 수정
    void deleteProduct(String prdNo); // 상품 정보 삭제
    ProductVo detailViewProduct(String prdNo); // 특정 상품 조회
}

ProductVo

package com.spring_mvc.mybatis.model;

public class ProductVo {
    private String prdNo;
    private String prdName;
    private int prdPrice;
    private String prdCompany;
    private int prdStock;

    public String getPrdNo() {
        return prdNo;
    }
    public void setPrdNo(String prdNo) {
        this.prdNo = prdNo;
    }
    public String getPrdName() {
        return prdName;
    }
    public void setPrdName(String prdName) {
        this.prdName = prdName;
    }
    public int getPrdPrice() {
        return prdPrice;
    }
    public void setPrdPrice(int prdPrice) {
        this.prdPrice = prdPrice;
    }
    public String getPrdCompany() {
        return prdCompany;
    }
    public void setPrdCompany(String prdCompany) {
        this.prdCompany = prdCompany;
    }
    public int getPrdStock() {
        return prdStock;
    }
    public void setPrdStock(int prdStock) {
        this.prdStock = prdStock;
    }
}

IProductService

package com.spring_mvc.mybatis.service;

import com.spring_mvc.mybatis.model.ProductVo;
import java.util.ArrayList;

public interface IProductService {
    // 구현 클래스에서 오버라이딩 할 추상 메소드 선언(규격 지정 선언)
    // 반드시 구현해야함
    ArrayList<ProductVo> listAllProduct(); // 전체 상품 조회
    void insertProduct(ProductVo productVo); // 상품 정보 등록
    void updateProduct(ProductVo productVo); // 상품 정보 수정
    void deleteProduct(String prdNo); // 상품 정보 삭제
    ProductVo detailViewProduct(String prdNo); // 특정 상품 조회
}

ProductService

package com.spring_mvc.mybatis.service;

import com.spring_mvc.mybatis.dao.IProductDAO;
import com.spring_mvc.mybatis.model.ProductVo;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

@Service
public class ProductService implements IProductService{
    // MyBatis 사용할 때는
    @Setter(onMethod_ = {@Autowired})
    @Qualifier("IProductDAO")
    IProductDAO dao;
    @Override
    public ArrayList<ProductVo> listAllProduct() {
        return dao.listAllProduct();
    }
    @Override
    public void insertProduct(ProductVo productVo) {
        dao.insertProduct(productVo);
    }
    @Override
    public void updateProduct(ProductVo productVo) {
        dao.updateProduct(productVo);
    }
    @Override
    public void deleteProduct(String prdNo) {
        dao.deleteProduct(prdNo);
    }
    @Override
    public ProductVo detailViewProduct(String prdNo) {
        return dao.detailViewProduct(prdNo);
    }
}

SQL

Mapper(ProductMapper.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" >

<mapper namespace="com.spring_mvc.mybatis.dao.IProductDAO">
    <resultMap id="prdResult" type="com.spring_mvc.mybatis.model.ProductVo" >
        <result property="prdNo" column="prdNo" />
        <result property="prdName" column="prdName" />
        <result property="prdPrice" column="prdPrice" />
        <result property="prdCompany" column="prdCompany" />
        <result property="prdStock" column="prdStock" />
    </resultMap>
<!--  id값은 Service에 있는 메소드 명과 같아야 한다.  -->

<!--  전체 상품 조회  -->
    <select id="listAllProduct" resultMap="prdResult">
        SELECT * FROM product ORDER BY prdNo
    </select>
<!--  상품 등록  -->
    <insert id="insertProduct" parameterType="com.spring_mvc.mybatis.model.ProductVo" >
        INSERT INTO product (prdNo, prdName, prdPrice, prdCompany, prdStock)
        VALUES (#{prdNo}, #{prdName}, #{prdPrice}, #{prdCompany}, #{prdStock})
    </insert>
<!--  상세 상품 정보 조회  -->
    <select id="detailViewProduct" parameterType="string" resultType="com.spring_mvc.mybatis.model.ProductVo" >
        SELECT * FROM product WHERE prdNo=#{prdNo}
    </select>
<!--  상품 정보 수정 (상품 번호(기본키)는 수정 안 함) -->
    <update id="updateProduct" parameterType="com.spring_mvc.mybatis.model.ProductVo" >
        update product set prdName=#{prdName}, prdPrice=#{prdPrice}, prdCompany=#{prdCompany}, prdStock=#{prdStock}
        where prdNo=#{prdNo}
    </update>
<!--  상품 삭제  -->
    <delete id="deleteProduct" parameterType="string">
        delete from product where prdNo=#{prdNo}
    </delete>
</mapper>

JSP

index

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
      <title>상품 관리 시스템</title>
    </head>
    <body>
      <h3>MyBatis 사용 DB 연동</h3>
      <h4>상품 관리 시스템</h4>
      <a href="product/listAllProduct">전체 상품 조회</a><br><br>
      <a href="product/newProductForm">상품 등록</a><br><br>
    </body>
</html>

productListView

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>전체 상품 조회</title>
</head>
<body>
<h3>전체 상품 조회</h3>
<table border="1" width="600">
    <tr><th>상품번호</th><th>상품명</th><th>가격</th><th>제조사</th><th>재고</th><th>사진</th></tr>
    <c:forEach items="${prdList }" var="prd">
        <tr><td><a href="<c:url value='/product/detailViewProduct/${prd.prdNo}'/>">${prd.prdNo }</a></td>
            <td>${prd.prdName }</td>
            <td>${prd.prdPrice }</td>
            <td>${prd.prdCompany }</td>
            <td>${prd.prdStock }</td>
            <td><img src="c:url value='/images/${prd.prdNo}.jpg' />" width="30" height="20"/></td></tr>
    </c:forEach>
</table><br>

<a href="<c:url value='/' />">메인 화면으로 이동</a>

</body>
</html>

newProductForm

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>상품 등록</title>
  </head>
  <body>
    <h3>상풍 등록</h3>
    <form method="post" action="/product/insertProduct">
      <table>
        <tr><td>상품 번호</td><td><input type="text" name="prdNo"></td><td><input type="button" name="prdNoCheck">중복확인</td></tr>
        <tr><td>상품명</td><td><input type="text" name="prdName"></td></tr>
        <tr><td>가격 </td><td> <input type="text" name="prdPrice"></td></tr>
        <tr><td>제조회사</td><td><input type="text" name="prdCompany"></td></tr>
        <tr><td>재고 </td> <td><input type="text" name="prdStock"></td></tr>
        <tr><td colspan="2"><input type="submit" value="등록"> <input type="reset" value="취소"></td></tr>
      </table>
    </form>
  </body>
</html>

productDetailView

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>상품 상세 정보 조회</title>
    </head>
    <body>
        <h3>상품 상세 정보 조회</h3>
        <table border="1" width="300">
            <tr><td>상품번호</td><td>${prd.prdNo}</td></tr>
            <tr><td>상품명</td><td>${prd.prdName}</td></tr>
            <tr><td>가격</td><td>${prd.prdPrice}</td></tr>
            <tr><td>제조사</td><td>${prd.prdCompany}</td></tr>
            <tr><td>재고</td><td>${prd.prdStock}</td></tr>
        </table> <br>

        <a href="<c:url value='/'/>">메인으로 이동</a> <br><br>
        <a href="<c:url value='/product/updateProductForm/${prd.prdNo}'/>">상품 정보 수정(c:url)</a><br><br>
        <a href="/product/updateProductForm/${prd.prdNo}">상품 정보 수정(그냥 a tag)</a><br><br>
        <a href="javascript:deleteCheck();" >상품 정보 삭제</a><br><br>
        <script type="text/javascript">
            function deleteCheck() {
                var answer = confirm("선택한 상품을 삭제하시겠습니까?");
                if(answer == true) {
                    location.href = "/product/deleteProduct/${prd.prdNo}";
                }
            }
        </script>
    </body>
</html>

updateProductForm

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>상품 정보 수정</title>
  </head>
  <body>
    <h3>상품 정보 수정</h3>
    <form method="post" action="/product/updateProduct">
      <table>
        <tr><td>상품 번호</td><td><input type="text" name="prdNo" value="${prd.prdNo}" readonly></td></tr>
        <tr><td>상품명</td><td><input type="text" name="prdName" value="${prd.prdName}"></td></tr>
        <tr><td>가격 </td><td> <input type="text" name="prdPrice" value="${prd.prdPrice}"></td></tr>
        <tr><td>제조회사</td><td><input type="text" name="prdCompany" value="${prd.prdCompany}"></td></tr>
        <tr><td>재고 </td> <td><input type="text" name="prdStock" value="${prd.prdStock}"></td></tr>
        <tr><td colspan="2"><input type="submit" value="수정"> <input type="reset" value="취소"></td></tr>
      </table>
    </form>
  </body>
</html>
728x90
Comments