스프링/3. 스프링 MVC

53. 도메인

sdafdq 2023. 8. 14. 22:30
@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;
    }
}

@Data는 사실 위험하다. 쓰는 건 한 @Getter @Setter 정도.

 

/**
 * Generates getters for all fields, a useful toString method, and hashCode and equals implementations that check
 * all non-transient fields. Will also generate setters for all non-final fields, as well as a constructor.
 * <p>
 * Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}.
 * <p>
 * Complete documentation is found at <a href="https://projectlombok.org/features/Data">the project lombok features page for &#64;Data</a>.
 * 
 * @see Getter
 * @see Setter
 * @see RequiredArgsConstructor
 * @see ToString
 * @see EqualsAndHashCode
 * @see lombok.Value
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {

@Data 안에 있는 내용인데,  @Data를 쓰면 뭐를 제공해 주는 지 알고 쓰자.

 

 

@Repository
public class ItemRepository {
    private static final Map<Long, Item> store = new HashMap<Long, Item>();
    private static long sequence = 0L;



    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(){
        return new ArrayList<Item>(store.values());
    }

    public void update(Long id, Item updateParam){
        Item currItem = findById(id);
        currItem.setItemName(updateParam.getItemName());
        currItem.setPrice(updateParam.getPrice());
        currItem.setQuantity(updateParam.getQuantity());
    }

    public void clearStore(){
        store.clear();
    }
}

ArrayList<>에다가 저렇게 배열을 담으면 그걸로 리스트를 만들어 준다.

 

update는 사실 저렇게 Item으로 새로 받는 것 보다 ItemDto (data to object)라는 클래스를 하나 만드는 게 좋다. 필요한 정보만 담는. 

 

 

public class ItemRepositoryTest {
    ItemRepository itemRepository = new ItemRepository();

    @AfterEach
    void afterEach(){
        itemRepository.clearStore();
    }

    @Test
    public void save(){
        Item item = new Item("ItemA",10000,10);
        Item savedItem = itemRepository.save(item);

        assertThat(item).isSameAs(savedItem);
    }

    @Test
    public void findAll(){
        Item item1 = new Item("ItemA",10000,10);
        Item item2 = new Item("ItemB",20000,15);
        itemRepository.save(item1);
        itemRepository.save(item2);
        List<Item> items = itemRepository.findAll();
        assertThat(items.size()).isEqualTo(2);
        assertThat(items).contains(item1, item2);
    }

    @Test
    public void updateItem(){
        Item item = new Item("ItemA",10000,10);
        itemRepository.save(item);
        Item forUpdateItem = new Item("UpdatedItem", 20000,3);
        itemRepository.update(item.getId(), forUpdateItem);

        assertThat(itemRepository.findById(item.getId()).getItemName()).isEqualTo(forUpdateItem.getItemName());
        assertThat(itemRepository.findById(item.getId()).getPrice()).isEqualTo(forUpdateItem.getPrice());
        assertThat(itemRepository.findById(item.getId()).getQuantity()).isEqualTo(forUpdateItem.getQuantity());
    }
}

contains는 한 리스트 안에 저러 한 객체를 포함하고 있는지.

'스프링 > 3. 스프링 MVC' 카테고리의 다른 글

55. 컨트롤러 구현  (0) 2023.08.15
54. 타임리프 템플릿  (0) 2023.08.15
52. 요구사항  (0) 2023.08.14
51. 요청 파라미터 및 메시지바디의 데이터 정리  (0) 2023.08.13
50. 스프링MVC 구조 전체정리.  (0) 2023.08.13