JPA
qlrm 라이브러리와 mariaDB 사용시 주의사항
MIN우
2023. 2. 7. 17:07
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