728x90
@Controller
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;
private final MemberService memberService;
private final ItemService itemService;
@GetMapping("/order")
public String createForm(Model model){
List<Member> members = memberService.findMembers();
List<Item> items = itemService.findItems();
model.addAttribute("members",members);
model.addAttribute("items",items);
return "order/orderForm";
}
@PostMapping("/order")
public String order(@RequestParam("memberId") Long memberId
,@RequestParam("itemId") Long itemId
,@RequestParam("count") int count){
//핵심 비지니스 로직이 있는경우 식별자만 넘겨주고 서비스에서 모두 적용시켜주는 것이 좋다.
//하나의 영속성 컨택스트에서 동작시키기 위해 식별자를 받아 Transaction 에서 동작시킨다.
orderService.order(memberId,itemId,count);
return "redirect/order";
}
}
- createForm 메서드
- 주문을 등록하는 화면을 보여주는 메서드
- Member 목록과 item목록을 읽어 들여 SelectBox에 뿌려준다.
- order 메서드
- 여러 식별자를 조회해주는 경우 하나의 서비스 메서드에서 동작시켜 주는 것이 좋다.
- why? 영속성 컨택스트로 관리해 줄수 있기 때문에.
- 만약 controller에서 조회하여 service에서 객체를 전달받을 경우 해당 객체는 영속성 컨택스트가 관리하는 것이 아닌 준영속 컨택스트가 되는 것이므로 더티 체크와 같은 기능을 동작시켜 줄 수가 없다.
- 따라서 하나의 트랜잭션에서 메서드를 동작시켜 줄 수 있도록 하는 것이 좋다.
- 여러 식별자를 조회해주는 경우 하나의 서비스 메서드에서 동작시켜 주는 것이 좋다.
728x90
'실전! 스프링 부트와 JPA 활용1(웹 애플리케이션 개발)' 카테고리의 다른 글
| Ch01. 프로젝트 환경설정 - View 환경 설정 (0) | 2022.04.24 |
|---|---|
| Ch07. 웹 계층 개발 - 주문 목록 검색, 취소 (0) | 2021.12.07 |
| Ch07. 웹 계층 개발 - 변경 감지와 병합(merge) (0) | 2021.12.07 |
| Ch07. 웹 계층 개발 - 상품 수정 (0) | 2021.12.07 |
| Ch07. 웹 계층 개발 - 상품 등록, 상품 목록 (0) | 2021.12.07 |