ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 계층 개발 - 상품 등록, 목록 조회
    JPA/JPA 활용 2023. 7. 11. 18:12

    상품을 등록하고 조회할 수 있는 기능을 만들어 볼 것이다. (예제 단순화를 위해 상품은 책 하나)

     

     

     

    BookForm

    @Getter @Setter
    public class BookForm {
    
        private Long id;
    
        private String name;
        private int price;
        private int stockQuantity;
    
        private String author;
        private String isbn;
    }

    Item의 정보들을 닮을 수 있는 form인 BookForm이다.

     

     

     

    상품 등록

     

    ItemController

    @Controller
    @RequiredArgsConstructor
    public class ItemController {
    
        private final ItemService itemService;
    
        @GetMapping("/items/new")
        public String createForm(Model model) {
            model.addAttribute("form", new BookForm());
            return "items/createItemForm";
        }
    
    
        @PostMapping("/items/new")
        public String create(BookForm form) {
            // Valid 등 스프링 기능은 스프링 블로그에 있으니 여기서는 JPA 외의 것들은 최소화
    
            Book book = new Book();
            book.setName(form.getName());
            book.setPrice(form.getPrice());
            book.setStockQuantity(form.getStockQuantity());
            book.setAuthor(form.getAuthor());
            book.setIsbn(form.getIsbn());
            // setter 사용을 안하고 생성자등으로 값을 넣어야함
    
            itemService.saveItem(book);
            return "redirect:/items"; // 저장된 책 목록으로 리다이렉트
        }

    ItemController에 있는 상품을 등록하는 기능이다. @GetMapping으로 접근한 /items/new url은 BookForm을 model로 넘겨주고 createItemForm.html을 보여주는 기능을 한다.

    @PostMapping으로 접근할 때에는 BookForm에 이름, 가격, 수량, 저자, isbn을 set으로 값을 넣어주고 그것들을 db에 저장해주는 기능을 한다. 저장을 하고 submit을 누르면 상품 목록으로 자동으로 리다이렉트 해준다.

     

     

    createItemForm.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"/>
      <form th:action="@{/items/new}" 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="author">저자</label>
          <input type="text" th:field="*{author}" class="form-control"
                 placeholder="저자를 입력하세요">
        </div>
        <div class="form-group">
          <label th:for="isbn">ISBN</label>
          <input type="text" th:field="*{isbn}" class="form-control"
                 placeholder="ISBN을 입력하세요">
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
      <br/>
      <div th:replace="fragments/footer :: footer" />
    </div> <!-- /container -->
    </body>
    </html>

     

    상품 등록에서 상품을 등록한다.

     

     

    상품 목록 조회

    @GetMapping("/items")
    public String list(Model model) {
        List<Item> items = itemService.findItems();
        model.addAttribute("items", items);
        return "items/itemList";
    }

    상품목록을 조회할 수 있는 기능이다. itemService에서 findItems라는 기능을 가져와서 모델에 넘겨주면 itmeService.findItems가 자동으로 상품 목록들을 받아와서 html에 모델로 넘겨준다.

     

    상품 목록

    itemList.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"/>
      <div>
        <table class="table table-striped">
          <thead>
          <tr>
            <th>#</th>
            <th>상품명</th>
            <th>가격</th>
            <th>재고수량</th>
            <th></th>
          </tr>
          </thead>
          <tbody>
          <tr th:each="item : ${items}">
            <td th:text="${item.id}"></td>
            <td th:text="${item.name}"></td>
            <td th:text="${item.price}"></td>
            <td th:text="${item.stockQuantity}"></td>
            <td>
              <a href="#" th:href="@{/items/{id}/edit (id=${item.id})}"
                 class="btn btn-primary" role="button">수정</a>
            </td>
          </tr>
          </tbody>
        </table>
      </div>
      <div th:replace="fragments/footer :: footer"/>
    </div> <!-- /container -->
    </body>
    </html>

     

    'JPA > JPA 활용' 카테고리의 다른 글

    변경 감지와 병합(merge)  (0) 2023.07.11
    웹 계층 개발 - 상품 수정  (0) 2023.07.11
    웹 계층 개발 - 회원 등록, 목록 조회  (0) 2023.07.11
    주문 기능 테스트  (0) 2023.07.11
    주문 리포지토리, 서비스 개발  (0) 2023.07.11
Designed by Tistory.