728x90
5.상품도메인개발
- 목차
- 1.상품 엔티티 개발 (비즈니스 로직 추가)
- 2.상품 리포지토리 개발(Repository)
- 3.상품 서비스 개발(Service)
- 4.상품 기능 테스트(Test)
1.상품 엔티티 개발 (비즈니스 로직 추가)
Item
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {
//비즈니스로직
//재고수량 증가
public void addStock(int quantity){
this.stockQuantity +=quantity;
}
//재고량 감소
public void removeStock(int quantity){
int restStock = this.stockQuantity - quantity;
if(restStock<0){
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity=restStock;
}
}
- 도메인 엔티티 안에 비즈니슥 로직을 넣는게 응집력이 강하다
- Setter를 쓰는것보다는 addStock , removeStock 로직을 이용해서 바꾸는것이 좋다
2.상품 리포지토리 개발(Repository)
ItemRepository
@Repository
@RequiredArgsConstructor
public class ItemRepository {
private final EntityManager em;
//상품 생성
public void save(Item item){
if(item.getId()==null){
em.persist(item);
}else{
em.merge(item);
}
}
//단건 조회
public Item findOne(Long id){
return em.find(Item.class,id);
}
//전체조회
public List<Item> findAll(){
return em.createQuery("select i from Item i",Item.class)
.getResultList();
}
}
- 아이디 없을경우 새로 생성해주고 있을 경우 merge 해줘서 병합해준다
3.상품 서비스 개발(Service)
- 상품 등록
- 상품 목록 조회
- 상품 수정
@Service @Transactional(readOnly = true) @RequiredArgsConstructor public class ItemService { private ItemRepository itemRepository; //상품등록 @Transactional public void saveItem(Item item){ itemRepository.save(item); } //상품모두조회 public List<Item> findItems(){ return itemRepository.findAll(); } //상품단건조회 public Item findOne(Long itemId){ return itemRepository.findOne(itemId); }
- Member
- ItemRepository 를 이용해서 등록 조회 단건조회를 만든다
출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard (JPA 웹 애플리케이션 1)
728x90
'Back-End > Spring Data' 카테고리의 다른 글
7.웹 계층 개발 1(회원,상품) (0) | 2021.01.01 |
---|---|
6.주문도메인개발 (0) | 2020.12.30 |
4.회원도메인 개발 (0) | 2020.12.30 |
3.엔티티클래스 개발2 (0) | 2020.12.30 |
2.엔티티 클래스 개발1 (0) | 2020.12.30 |