📒 [실전! 스프링 부트와 JPA 활용 - 김영한] 프로젝트를 완성한 후 부족한 기능을 개선한 후 정리하는 글입니다.
Album
), 책(Book
), 영화(Movie
) 상품 중 책(Book
)에 해당하는 상품만 등록할 수 있었습니다.Album
), 영화(Movie
)로 구성된 상품도 GUI를 통해 등록할 수 있도록 기능을 개선하였습니다.상품 등록
버튼을 클릭하면 책(Book
) 상품을 등록할 수 있는 페이지만 존재하였습니다.Album
), 영화(Movie
) 상품을 등록할 수 있는 html
을 각각 추가로 작성하였습니다.<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/header :: header" />
<body>
<div class="container">
<div th:replace="fragments/bodyHeader :: bodyHeader"/>
<!-- select item -->
<div align="right">
<label>등록하고자 하는 상품 종류를 선택해 주세요.</label>
<br/>
<div class="btn-group btn-group-lg" role="group" aria-label="Large button group">
<a type="button" class="btn btn-outline-dark" href="/items/new/album">ALBUM</a>
<a type="button" class="btn btn-outline-dark" href="/items/new/book">BOOK</a>
<a type="button" class="btn btn-outline-dark" href="/items/new/movie">MOVIE</a>
</div>
</div>
<br/>
<!-- itemForm -->
<form th:action="@{/items/new/album}" th:object="${form}" method="post">
<div class="form-group">
<label th:for="name">상품명</label>
<input type="text" th:field="*{name}" class="form-control"
placeholder="이름을 입력하세요">
</div>
<div class="form-group">
<label th:for="price">가격</label>
<input type="number" th:field="*{price}" class="form-control"
placeholder="가격을 입력하세요">
</div>
<div class="form-group">
<label th:for="stockQuantity">수량</label>
<input type="number" th:field="*{stockQuantity}" class="form-control" placeholder="수량을 입력하세요">
</div>
<div class="form-group">
<label th:for="artist">아티스트</label>
<input type="text" th:field="*{artist}" class="form-control"
placeholder="아티스트를 입력하세요">
</div>
<div class="form-group">
<label th:for="etc">기타</label>
<input type="text" th:field="*{etc}" class="form-control"
placeholder="기타 정보를 입력하세요">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<br/>
<div th:replace="fragments/footer :: footer"/>
</div> <!-- /container -->
</body>
</html>
Form
을 구현합니다.public class AlbumForm {
private Long id;
private String name;
private int price;
private int stockQuantity;
private String artist;
private String etc;
}
@GetMapping("/items/new/album")
public String createAlbumForm(Model model){
model.addAttribute("form", new AlbumForm());
return "items/createAlbumForm";
}
@GetMapping()
설정을 합니다.model
에 해당하는 상품의 Form
을 추가하여 HTML 페이지에서 사용자로부터 정보를 받아올 수 있도록 설정합니다.@PostMapping("/items/new/album")
public String createAlbum(AlbumForm form){
Album album = Album.createAlbum(form.getName(), form.getPrice(), form.getStockQuantity(), form.getArtist(), form.getEtc());
itemService.saveItem(album);
return "redirect:/items";
}
<input>
에 입력한 값을 Post
방식으로 전달한 데이터인 form
을 이용하여 새로운 Album
객체를 만들고 itemService
의 saveItem()
메서드를 통해 생성한 Album
객체를 DB에 저장합니다.Album
, Book
, Movie
객체는 Item
을 상속(extends
) 받기 때문에 공통적인 요소들이 많다.