INTP의 멋대로 개발 세상

[📚상품 구매 사이트 5단계] 관리자 페이지 - 유저의 구매목록 보기 본문

KDT 풀스택 국비 과정/파이널 프로젝트(미니)

[📚상품 구매 사이트 5단계] 관리자 페이지 - 유저의 구매목록 보기

인팁구름 2023. 4. 27. 16:50

이전의 유저목록(유저관리) 페이지에서는

구매자, 관리자가 모두 페이지에 떴다.

구매자이든 관리자이든 하나의 user 테이블에 속해있기 때문에

findAll 메서드를 사용하니 둘 다 뜬 것이다.

이번에는 유저의 구매목록을 만들어 보자.😋😋

 

⏬ 5단계 깃 허브 보러가기 (전체 코드) ⏬

 

GitHub - JungminK1m/Springboot-Product-Study-V5

Contribute to JungminK1m/Springboot-Product-Study-V5 development by creating an account on GitHub.

github.com


 

📺 화면 설계📺

 

header.jsp

 

adminOrdersList.jsp

 

기존의 ordersList는 구매자 본인의 주문 목록이고,

adminOrdersList는 관리자가 유저들의 주문목록을 보는 화면이다.

(파일 이름 센스 부족 뭐임...와 진짜 누가보면 관리자가 구매한 목록 보는 페이지인 줄 알겠네)

 

 


 

🎤 코드 리뷰 🎤

 

header.jsp

 

우선 헤더에 유저구매목록 메뉴를 만들어 주자!

href는 주소는 컨트롤러의 @GetMapping  주소와 같다!

 

 

 

adminFindAll 메서드를 호출해서 orderedList에 담아주었다.

orderedList를 다시 Model 객체에 담아준다.

 

ordersRepository
AdminOrdersListDto.java

 

<왜 리턴타입이 AdminOrdersListDto일까?>

 

매개변수에 AdminOrdersListDto라는 것도 없는데 갑자기? 뭐야? 라고 생각한 나를 위해 정리했다.

 

orders.xml

 

 

 

< adminFindAll의 Join문에 대한 설명 >

 

그려놓은 화면을 보면

 

 

userName, ordersName, ordersPrice, ordersQty, createdAt 이 필요하다.

 

 

하지만 orders(주문) 테이블에는 user_name에 대한 정보가 입력되어 있지 않기 때문에

user 테이블과 조인해 주어야 한다.

user_id의 값만으로는 찾아올 수 없다.

왜냐하면 이전에 구매자 입장에서 본인의 주문목록을 볼 때는 데이터 바인딩을 통해 로그인 한 본인의 userId를 가져올 수 있었지만,

지금은 관리자의 입장에서 특정 유저 한 명이 아니라 유저 "모두"의 결과를 보아야 하기 때문이다.

레파지토리 메서드를 새로 만들어서 쿼리문을 새로 짜야 한다.

 

 

user 테이블에선 user_name만 가져오고, 나머지는 orders 테이블에 있는 정보를 가져왔다.

조인 조건은 user 테이블과 orders 테이블 동시에 있는 user_id로 연결시켜 준다.

where 절을 통해서 orders_qty(주문 수량)가 1개 이상인 유저로 찾아준다.

주문 수량이 0개라는 것은 주문한 적이 없다는 거니까..

 

 

구매자의 본인 주문목록 조회 쿼리와

관리자의 유저주문목록 조회 쿼리는 이렇게 차이가 있다! 아예 다른 쿼리문이다.

 

 

JSP에서는 orderedList 이름이 너무 길어 op로 정하고 데이터를 사용하였다😮

 


📊 결과 확인 📊

 

 

DB에 있는대로 유저의 구매목록이 뜨는 모습이다.

 

Comments