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