@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 @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 |