위 코드는 서비스 계층에서 주문
을 담당하는 메소드이다.
Order
에는 CascadeType.ALL
로 설정되어 있다
44번줄 orderRepository.save(order)
에서는 연관관계에 있는 OrderItem
과 Delivery
를 따로 persist해주지 않아도 같이 영속화 된다.
비즈니스 요구사항에 따라 달라질 수 있는 부분이지만, 중요한 점은 JPA에서 이런식으로 자동으로 연관관계가 있는 객체들을 같이 데이터 영속화를 할 수 있다는 것이다.
MyBatis로 한다면? Order
, Delivery
, OrderItem
을 모두 따로 DAO에서(interface, .xml) 영속화 시키고 return order.getId()
부분도 따로 LAST_INSERT_ID()
등과 같이 디비 벤더에 맞는 함수를 또 작성ㅎ서 들고와야 할 것이다.
위 코드는 Order를 취소하는 것이다
order.cancel()
로 들어가보자.
orderItem.cancel()
로 들어가보자.
주문을 취소하는 로직에는 위와 같이 몇몇 정보들을 업데이트 해주어야한다.
JPA 같은 경우엔 그냥 order.cancel()
만 때리면 된다.
MyBatis? 한줄 한줄 모두 일일이 쿼리를 작성해서 업데이트해주어야한다.
무려 3개 쿼리를 만들어주어야하고 이를 관리해주어야한다
MyBatis만 쓰던 나는 이게 얼마나 신기하고 기가막히는지 모르겠다.
레퍼런스: 인프런 - 김영한님 JPA 활용 1편