SpringBoot와 JPA, Thymeleaf를 사용하여 간단한 쇼핑몰을 구현하려 합니다. 프로젝트 생성이나 Gradle 빌드는 깃허브 BincoShop을 참고해주세요! 포스팅은 도메인&테이블 설계 -> 엔티티 개발 -> 회원 서비스 -> 상품 서비스 -> 주문 서비스 순으로 진행됩니다. 포스팅의 잘못된 부분은 언제든 댓글로 남겨주시면 수정하겠습니다😀
개요
BincoShop 마지막 기능인 주문 검색 기능 개발 포스팅을 하려 합니다. 사진과 같이 회원명이나 주문 상태(ORDER, CANCEL)로 검색할 수 있게 구현할 예정입니다.
OrderSearch📙
@Getter
@Setter
public class OrderSearch {
private String memberName;
private OrderStatus orderStatus;
}
OrderSearch는 view단에서 controller로 넘길 때 controller에서 받을 DTO입니다. 개요에서 언급했듯이, 사용자는 회원명이나 주문 상태로 검색할 수 있기 때문에 memberName과 orderStatus를 선언하였습니다.
OrderController📘
@GetMapping("/orders")
public String orderList(@ModelAttribute("orderSearch") OrderSearch orderSearch, Model model){
List<Order> orders = orderService.findOrders(orderSearch);
model.addAttribute("orders", orders);
return "order/orderList";
}
Controrller단은 사실 포스팅하지 않을 계획이였는데 흐름상 언급하게 되었네요. 프로젝트의 규모가 크지 않고 기능도 많지 않아서 Controller와 Service단은 단순 위임하는 구조로 되기 때문에 포스팅을 안 했습니다.
하지만 OrderSearch DTO 사용법을 포스팅하기 위해서 첨부하게 되었습니다. 위 코드와 같이 @ModelAttribute 어노테이션을 사용하여 사용자단에서 보낸 orderSearch DTO를 받았고, orderService의 findOrders로 단순 위임하였습니다.
OrderService📒
public List<Order> findOrders(OrderSearch orderSearch) {
return orderRepository.findAll(orderSearch);
}
Service단도 단순히 orderRepository의 findAll() 메서드로 단순 위임합니다.
OrderRepository📔
public List<Order> findAll(OrderSearch orderSearch) {
return em.createQuery("select o from Order o join o.member m" +
" where o.status = :status" +
" and m.name like :name",
Order.class)
.setParameter("status", orderSearch.getOrderStatus())
.setParameter("name", orderSearch.getMemberName())
.setMaxResults(1000)
.getResultList();
}
OrderRepository에서는 QueryDSL을 사용하여 동적으로 쿼리를 작성합니다. 매개변수로 넘어온 orderSearch DTO를 파라미터 값으로 회원명, 주문 상태를 세팅해주었습니다.
이후에 DB로부터 넘겨받은 값을 최대 1000개로 설정하고, getResultList를 이용하여 List형식으로 추출하였습니다.
마치며
지금까지 BincoShop 쇼핑몰 백엔드 로직을 포스팅하였습니다. 도메인 모델 패턴을 사용해본 게 처음이어서 많이 익숙하지는 않았지만, 확실히 유지보수 측면에서는 트랜잭션 스크립트 패턴보다 성능이 높을 것 같네요.
글솜씨나 설명이 많이 부족했을 것 같은데 혹여나 궁금한 점은 댓글로 달아주시거나 김영한 강사님의 강의를 참고하시면 될 것 같습니다😄
👨👩👦👦 오픈채팅방 운영
취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁
참여코드 : 456456
https://open.kakao.com/o/gVHZP8dg
👨💻 전자책 출간
아울러 제가 🌟비전공자에서 2년만에 보안 전문 중견기업으로 이직 한 방법들을 정리한 전자책을 출간 하게 되었습니다. 어떤 걸 공부해야 하는지, 이직을 위해서 무엇을 준비해야 하는지, 제가 받았던 기술 면접 리스트 등 다양한 목차로 구성되어 있습니다. 또한, 구매 시 1:1 채팅을 이용하여 포트폴리오 첨삭을 도와드리고 있습니다. 🐕전자책으로 얻은 모든 수익은 유기견 센터 '팅*벨 입양센터'에 후원될 예정입니다. 관심 있으신 분들은 아래 링크를 참고해주세요😁
관련 포스팅
Reference
'JPA' 카테고리의 다른 글
Spring Data JPA 쿼리 메서드 (0) | 2022.10.13 |
---|---|
Spring Data JPA와 기존 JPA의 차이점 및 사용법 (0) | 2022.10.13 |
SpringBoot JPA 쇼핑몰 주문 서비스 II (0) | 2022.09.15 |
SpringBoot JPA 쇼핑몰 주문 서비스 I (0) | 2022.09.15 |
SpringBoot JPA 쇼핑몰 상품 서비스 개발 (0) | 2022.09.14 |