SNS 포토그램 만들기 (구독정보 뷰 렌더링)

송용준·2023년 7월 17일
0

구동정보 완성하기

Repository에 네이티브 쿼리를 이용해 구독정보를 만든다.
dto에는 구독수, 구독상태를 만들어 준다.
UserService에선 SubscribeRepository를 주입받는다.

구독 및 구독취소 구현하기

기능 구현은 js에 ajax형태로 함수를 만들고 jsp에서 id하고 obj를 넘겨서 만든다.

구독 모달 정보를 위한 API 만들기

dto 만들어 주고 UserApiController에 구독정보를 가지고 올 준비를 하고 SubscribeService도 만들어 놓는다.
MariaDB는 int를 Integer로 받아야 오류가 없음

조인과 스칼라 서브쿼리

** 어려움 주의
유저정보 + 구독했는지 여부 + 동일인인지 판단
스칼라 서브쿼리 : 셀렉트절에 셀렉트 하나 더 나오는것

-- 조인(user.id = subscirbe.toUserId)
SELECT u.id, u.username, u.profileImageUrl
FROM user u 
INNER JOIN subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;

-- 로그인(1), 화면(1,3)
SELECT true FROM subscribe WHERE fromUserId = 1 AND toUserId = 1;
SELECT true FROM subscribe WHERE fromUserId = 1 AND toUserId = 3;

-- 가상 칼럼을 추가
SELECT u.id, u.username, u.profileImageUrl, 1 subscribeState
FROM user u INNER JOIN subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;

-- 스칼라 서브 쿼리
SELECT u.id, u.username, u.profileImageUrl,
(SELECT COUNT(*) FROM user) subscribeState
FROM user u 
INNER JOIN subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;

-- 구독여부 완성 쿼리
SELECT u.id, u.username, u.profileImageUrl,
(SELECT true FROM subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState
FROM user u 
INNER JOIN subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;

-- 동일 유저인지 판단 추가
SELECT u.id, u.username, u.profileImageUrl,
(SELECT true FROM subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState,
(1 = u.id) equalsUserState
FROM user u 
INNER JOIN subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;

쿼리 실력을 늘리기 위해선 하나하나씩 생각해 가며 순서대로 만들어 봐야함. 실무에서는 수천 줄 쿼리가 만들어 질 수도 있음

QLRM 라이브러리로 DTO매핑하기

SubscribeRepository에서는 Subscribe타입이 아니기 때문에 만들어 놓은 쿼리를 사용할 수 없다. 그러므로 SubscribeService에서 직접 네이티브 쿼리로 짠다.

qlrm : 데이터베이스에 result된 결과를 자바클래스에 매핑해 주는 라이브러리

리턴받을 결과가 모델의 결과가 아닌 새로운 조합의 dto면 jpaRepository 못씀. qlrm을 써야함

구독모달 정보 렌더링 완료 && 구독 모달 정보에서 구독 및 구독취소 구현하기

profile
용용

0개의 댓글