작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
470
·
수정됨
0
@GetMapping("/orders")
public String orderList(@ModelAttribute("orderSearch") OrderSearch orderSearch, Model model) {
List<Order> orders = orderService.findOrders(orderSearch);
model.addAttribute("orders", orders);
return "order/orderList";
}
여기 로직에서 검색조건 없이 홈 화면에서
주문 내역 버튼 눌러서 들어갔을 때 어떻게 모든 주문 내역이 출력되는거죠?
코드에는 orderSearch로 검색조건 받아서 검색, 출력하는 코드밖에 없는데 이해가 안가네요 ㅜㅜ
같은 메소드에서 모두 조회, 검색조건에 따른 조회가 같이 일어나는것인가요
답변 1
0
안녕하세요. 동헌님, 공식 서포터즈 OMG입니다.
질문 내용에 대한 현상을 이해하려면 Controller코드도 중요하지만, 그 하부의 내부 구현코드를 살펴보셔야 합니다.
Controller 에서는 Service의 findOrders()를 호출하는데요,
그렇다면 먼저 findOrders()에서는 어떻게 처리하고 있는지를 확인해야 합니다.
findOrders()를 보면 Repository의 findAllByString(검색조건); 을 호출하니까 orderRepository까지 확인을 해봐야 합니다.
코드를 확인해보면
주문 내역 버튼 눌러서 들어갔을 때 어떻게 모든 주문 내역이 출력되는거죠?
해당 질문에 대한 답이 포함되어 있는데요.
String jpql = "select o from Order o join o.member m";
이 쿼리는 회원에 대한 모든 주문건을 뽑아옵니다.
그리고 아래의 코드에서 주문상태 검색 조건과 이름 검색을 통해 주문 내에서 각각 검색 내용이 포함되어 있을 경우 where 조건을 쿼리 문자열에 포함하여 필터링 하고 있습니다.
화면 진입 시점에는 필터링 할 검색 조건이 없기 때문에 처음 선언한 jpql로 모든 주문 데이터를 가져오게 되고, 주문 목록에 진입해서 검색을 했을 때는 검색 조건이 추가되어 검색에 맞게 필터링 처리가 되어 결과를 반환하게 됩니다.
감사합니다.