본문 바로가기
Back-End/Spring Data

5.상품도메인 개발

by 두두리안 2020. 12. 30.
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