728x90
Subscribe.Service
@Transactional(readOnly = true)
public List<subscribeResponseDto> subscribeList(long principalId, long pageUserId) {
StringBuffer sb = new StringBuffer();
sb.append("select u.id userId, u.username, u.profileImageUrl, ");
sb.append("if( (select true from subscribe where fromUserId = ? and toUserId = u.id), true, false) subscribeState, "); // principalDetails.user.id
sb.append("if(u.id = ?, true, false) equalState "); // principalDetails.user.id
sb.append("from subscribe f inner join user u on u.id = f.toUserId ");
sb.append("where f.fromUserId = ? "); // pageUserId
Query query = em.createNativeQuery(sb.toString())
.setParameter(1, principalId)
.setParameter(2, principalId)
.setParameter(3, pageUserId);
System.out.println("쿼리 : "+query.getResultList().get(0));
JpaResultMapper result = new JpaResultMapper();
List<subscribeResponseDto> subscribeRespDtos = result.list(query, subscribeResponseDto.class);
return subscribeRespDtos;
}
subscribeResponseDto
package com.cos.photogramstart.web.dto.subscribe;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigInteger;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class subscribeResponseDto {
private BigInteger userId;
private String username;
private String profileImageUrl;
private Integer subscribeState; // mariadb에서는 Integer
private Integer equalState;
}
qlrm라이브러리는 쿼리로작성된 데이터들을 dto로 변환시킬때 편리하게 매핑시켜주는 라이브러리이다.
그중 Long 타입은 BigInteger로 받아줘야한다.
728x90
'JPA' 카테고리의 다른 글
JPA에서 Entity에 protected 생성자를 만드는 이유. (0) | 2023.02.16 |
---|---|
Entity를 Dto로 쉽게 변환 및 Entity노출을 최대한 자제해라. (0) | 2023.02.09 |
사용자 정의 리포지토리 구성 및 페이징처리 (0) | 2023.01.24 |
API 개발 고급 - 컬렉션 조회 최적화 정리 (0) | 2023.01.18 |
API 개발 고급 - 컬렉션 조회 최적화 (0) | 2023.01.17 |