-
[김영한 스프링] 29. 스프링 MVC 웹 페이지 만들기 - 상품 도메인 개발Spring/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 2023. 7. 19. 22:26
상품 도메인 개발
Item - 상품 객체
package hello.itemservice.domain.item; import lombok.Data; @Data public class Item { private Long Id; private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; } }
main/java/hello/itemservice/domain/item/Item 생성
price와 quantity에 null이 입력될 수 있기 때문에 Integer 사용
- 롬복 @Data
- @Getter , @Setter , @ToString , @EqualsAndHashCode , @RequiredArgsConstructor를 자동으로 적용해 준다.
@Data는 핵심 도메인에 사용하기 위험함
@Getter, @Setter를 사용하는 것을 추천(지금은 공부하기 위해 @Data 사용)
ItemRepository - 상품 저장소
package hello.itemservice.domain.item; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Repository public class ItemRepository { private static final Map<Long, Item> store = new HashMap<>(); // static private static long sequence = 0L; // static public Item save(Item item) { item.setId(++sequence); store.put(item.getId(), item); return item; } public Item findById(Long id) { return store.get(id); } public List<Item> findAll() { List<Item> items = new ArrayList<>(store.values()); return items; } public void update(Long itemId, Item updateParam) { Item findItem = findById(itemId); findItem.setItemName(updateParam.getItemName()); findItem.setPrice(updateParam.getPrice()); findItem.setQuantity(updateParam.getQuantity()); } public void clearStore() { store.clear(); } }
main/java/hello/itemservice/domain/item/ItemRepository 생성
ItemRepositoryTest - 상품 저장소 테스트
package hello.itemservice.domain.item; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.*; class ItemRepositoryTest { ItemRepository itemRepository = new ItemRepository(); @AfterEach void afterEach() { itemRepository.clearStore(); } @Test public void save() { //given Item item = new Item("itemA", 10000, 10); //when Item savedItem = itemRepository.save(item); //then Item findItem = itemRepository.findById(item.getId()); assertThat(findItem).isEqualTo(savedItem); } @Test public void findAll() { //given Item item1 = new Item("item1", 10000, 10); Item item2 = new Item("item2", 20000, 20); itemRepository.save(item1); itemRepository.save(item2); //when List<Item> result = itemRepository.findAll(); //then assertThat(result.size()).isEqualTo(2); assertThat(result).contains(item1, item2); } @Test public void updateItem() { //given Item item = new Item("item1", 10000, 10); Item savedItem = itemRepository.save(item); Long itemId = savedItem.getId(); // when Item updateParam = new Item("item2", 20000, 30); itemRepository.update(itemId, updateParam); Item findItem = itemRepository.findById(itemId); //then assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName()); assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice()); assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity()); } }
test/java/hello/itemservice/domain/item/ItemRepositoryTest 생성
test는 public 생략 가능
출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'Spring > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
[김영한 스프링] 31. 스프링 MVC 웹 페이지 만들기 - 상품 목록 타임리프 (0) 2023.07.23 [김영한 스프링] 30. 스프링 MVC 웹 페이지 만들기 - 상품 서비스 HTML (0) 2023.07.20 [김영한 스프링] 28. 스프링 MVC 웹 페이지 만들기 - 프로젝트 생성 & 세팅 & 요구사항 분석 (0) 2023.07.19 [김영한 스프링] 27. 스프링 MVC 기본 기능 - HTTP 메시지 컨버터 & 요청 매핑 헨들러 어뎁터 구조 (0) 2023.07.18 [김영한 스프링] 26. 스프링 MVC 기본 기능 - 응답 (0) 2023.07.17 - 롬복 @Data