package jpabook.jpashop.service;
import jpabook.jpashop.domain.item.Item;
import jpabook.jpashop.repository.ItemRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class ItemService {
private final ItemRepository itemRepository;
@Transactional
public void saveItem(Item item) {
itemRepository.save(item);
}
public List<Item> findItem() {
return itemRepository.findAll();
}
public Item findOne(Long itemId) {
return itemRepository.findOne(itemId);
}
}
상품 서비스는 단순히 상품 리포지토리에 단순히 위임만 하는 클래스입니다.
경우에 따라서 컨트롤에서 리포지토리에 바로 접근을 해서 사용해도 큰 문제는 없습니다. (그래도 주니어라면 서비스를 사용하는게..)
<aside> ❗ Item 의 repository 및 service 와 Member 의 repository 및 서비스 의 SAVE 메서드의 리턴 별로 차이?
save 메서드에서 void를 주거나 id를 준 것은 특별한 의미가 있는 것은 아닙니다.
지난번에 말씀드린 것 처럼 기본적으로 command는 데이터를 수정만 하고, 조회하지 않는 것이 좋습니다.
그래서 가장 좋은 것은 void 타입을 반환하는 것입니다.
그런데 void를 반환하면, 새로운 식별자를 알 수 없으니, 최소한의 반환으로 id 정도만 반환해 준 것입니다.
여기 예제에서는 item을 저장하고 그 결과를 확인 하는 부분이 없어서 그냥 void로 둔 것이고, 저장한 item의 id를 알아야 한다면 최소한 Id 정도는 반환하도록 고치는 것이 좋습니다^^
</aside>