[Spring Boot] 8. Spring Boot Project (Store v2)_4.Store - Save

김미숙's avatar
Mar 31, 2025
[Spring Boot] 8. Spring Boot Project (Store v2)_4.Store - Save

header

<!DOCTYPE html> <html lang="en"> <head> <title>Store</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <nav class="navbar navbar-expand-sm bg-dark navbar-dark"> <div class="container-fluid"> <a class="navbar-brand" href="/">Home</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" href="/join-form">회원가입</a> </li> <li class="nav-item"> <a class="nav-link" href="/login-form">로그인</a> </li> <li class="nav-item"> <a class="nav-link" href="#">상품목록</a> </li> <li class="nav-item"> <a class="nav-link" href="/store/save-form">상품등록</a> </li> <li class="nav-item"> <a class="nav-link" href="#">구매목록</a> </li> <li class="nav-item"> <a class="nav-link" href="/logout">로그아웃</a> </li> </ul> </div> </div> </nav> <!--네브바종료-->

save-form

{{> layout/header}} <div class="container mt-2"> <div class="mt-4 p-5 bg-light text-dark rounded-4"> <h1>상품등록 페이지</h1> <form action="/store/save" method="post"> <div class="mb-3 mt-3"> <input type="text" class="form-control" placeholder="상품명을 입력하세요" name="name"> </div> <div class="mb-3"> <input type="text" class="form-control" placeholder="재고를 입력하세요" name="stock"> </div> <div class="mb-3 mt-3"> <input type="text" class="form-control" placeholder="가격을 입력하세요" name="price"> </div> <button type="submit" class="btn btn-primary">상품등록</button> </form> </div> </div> </body> </html>

StoreRequest

package com.metacoding.storev2.store; import lombok.Data; public class StoreRequest { @Data public static class SaveDTO { private String name; private Integer stock; private Integer price; } }

StoreController

package com.metacoding.storev2.store; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @RequiredArgsConstructor @Controller public class StoreController { private final StoreService storeService; @GetMapping("/store/save-form") public String saveForm() { return "store/save-form"; } @PostMapping("/store/save") public String save(@RequestParam("name") String name, @RequestParam("stock") int stock, @RequestParam("price") int price) { System.out.println("name" + name); System.out.println("stock" + stock); System.out.println("price" + price); storeService.상품등록(name, stock, price); return "redirect:/"; } }

StoreService

package com.metacoding.storev2.store; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @RequiredArgsConstructor @Service public class StoreService { private final StoreRepository storeRepository; @Transactional public void 상품등록(String name, int stock, int price) { storeRepository.save(name, stock, price); } }

StoreRepository

package com.metacoding.storev2.store; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @RequiredArgsConstructor @Repository public class StoreRepository { private final EntityManager em; public void save(String name, int stock, int price) { Query query = em.createNativeQuery("insert into store_tb (name, stock, price) values (?, ?, ?)"); query.setParameter(1, name); query.setParameter(2, stock); query.setParameter(3, price); query.executeUpdate(); } }
Share article

parangdajavous