오봉이와 함께하는 개발 블로그
Spring - 간단한 예제 본문
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
'BE > Spring' 카테고리의 다른 글
Spring - 간단한 예제 + 중복 체크 (0) | 2022.01.11 |
---|---|
Spring - REST & Ajax (0) | 2022.01.11 |
Spring - IntelliJ MySQL&MyBatis 연동 오류 해결 (0) | 2022.01.10 |
Spring - IntelliJ MyBatis 연동 (0) | 2022.01.07 |
IntelliJ에서 SpringMVC 프로젝트 생성 (0) | 2022.01.07 |
Comments