1. 복습
cascade하면 부모 객체만 저장하면 관련된 자식 객체는 자동으로 persist 된다
2. 애플리케이션 아키텍쳐
-계층형 구조 사용
controller,web: 웹 계층
service: 비즈니스 로직, 트랜잭션 처리
repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용
domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용
3. @SpringBootTest
컴포넌트 스캔을 해서 스프링 빈에 컴포넌트를 등록한다
4. 테스트 시 Rollback 하는 이유
: db에 테스트 데이터를 남기지 않기 위해서
5. 스프링 부트가 설정이 없으면 기본으로 메모리 모드로 돌린다
6. 엔티티에 비즈니스 로직
엔티티 안에 비즈니스 로직을 넣는 것이 좋다(객체지향적인 방법)
데이터를 가지고 있는 곳에서 로직을 실행하는 것이 응집력이 있음
1) Order.class
- 생성 메서드
Order에서 참조하는 member,delivery,orderItem을 파라미터로 받고 set으로 설정해준다
orderItems는 리스트이므로 반복문으로 하나씩 order에 추가해준다 (여기가 익숙하지 않다)
order가 생성된 것이므로, orderStatus는 ORDER로 설정하고, 현재 시간을 설정해준다
-비즈니스 로직: 주문을 취소한 경우에 대해 구현했다
먼저 해당 상품이 배송중인지 아닌지를 확인한다
배송중이라면 illegalstateexception("이미 배송 완료된 상품은 취소가 불가능합니다") 설정하고, OrderStatus를 CANCEL로 바꿔준다(setStatus)
배송중인 상품이 아니라면, 각각의 orderItems에 대해서 cancel을 실행한다
-조회로직: 주문갯수와 가격을 고려해서 총가격을 가져오는 메소드이다
2) OrderItem.class
-OrderItems 생성메서드
아이템을 구성하는 것들을 set으로 설정한다음 item이 stock에서 count만큼 줄인다
-OrderItems 취소 비즈니스 로직
: 취소한만큼의 stock을 item에 추가해준다
-주문상품 전체 가격조회
전체 가격은 주문 가격*갯수이므로 그것으로 구현해준다
7. 현재 문맥에서 가장 적합한 패턴 사용하기(예제에서는 도메인 모델 패턴)
-도메인 모델 패턴: 엔티티가 비즈니스 로직을 가지고 객체 지 향의 특성을 적극 활용하는 것
8. 연관관계 편의 메소드
양방향 연관관계를 가진 엔티티들에서 값 변경이 일어날때 양쪽 모두에 변경된 값을 입력을 할 수 있게 하는 메소드이다
'JPA > JPA + SpringBoot' 카테고리의 다른 글
[JPA+SpringBoot] 3/2 공부 내용 기록(웹 구현, OrderController) (0) | 2022.03.07 |
---|---|
[JPA +SpringBoot] 변경감지와 병합(dirty checking, merge) (0) | 2022.03.07 |
[JPA+SpringBoot] 3/2 공부 내용 기록(웹 구현, ItemController) (0) | 2022.03.07 |
[JPA+SpringBoot] 3/2 공부 내용 기록(웹 구현, MemberController) (0) | 2022.03.07 |
[JPA+SPRINGBOOT] 2/28 공부 내용 기록, 공부 1일차(p6spy,@Controller vs @RestController, @Transactional, 엔티티 설계) (0) | 2022.02.28 |