오봉이와 함께하는 개발 블로그

Querydsl - 프로젝션 결과 반환 (기본) 본문

BE/JPA

Querydsl - 프로젝션 결과 반환 (기본)

오봉봉이 2022. 9. 18. 18:38
728x90

프로젝션과 결과 반환 - 기본

프로젝션이란 select절에 어떤 것을 가져올지에 대한 대상을 지정하는 것이다.

프로젝션 대상이 하나

@Test
void simpleProjection() {
    List<String> result = queryFactory
            .select(member.username)
            .from(member)
            .fetch();
    for (String s : result) {
        System.out.println("s = " + s);
    }
}
  • 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다.
  • 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회

튜플 조회

Querydsl이 여러 개 조회할 때를 대비해서 만들어놓은 임의의 타입으로 프로젝션 대상이 둘 이상일 때 사용한다.

com.querydsl.core.Tuple

@Test
void tupleProjection() {
    List<Tuple> result = queryFactory
            .select(member.username, member.age)
            .from(member)
            .fetch();
    for (Tuple tuple : result) {
        String username = tuple.get(member.username);
        Integer age = tuple.get(member.age);
        System.out.println("username = " + username);
        System.out.println("age = " + age);
    }
}

member.usernamemember.age 문자열과 정수 타입의 형태를 반환하기 때문에 튜플을 통해 조회한다.

tuple.get(필드명)을 통해서 원하는 값을 찾아올 수 있다.

튜플을 리포지토리 계층에서는 사용해도 좋지만, 서비스나 컨트롤러 계층으로 넘어가서 사용하면 좋지 않을 수 있다.
DB 접근 기술을 바꾸더라도 리포지토리 계층에서만 코드를 변경해야 좋은 설계인데, 서비스 계층이나 컨트롤러 계층까지 튜플을 사용하면 DB 접근 기술을 바꿀 때 서비스, 컨트롤러 계층의 코드를 모두 수정해야 하는 불상사가 생길 수 있기 때문이다.

인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90

'BE > JPA' 카테고리의 다른 글

Querydsl - 프로젝션 결과 반환 (@QueryProjection)  (0) 2022.09.18
Querydsl - 프로젝션 결과 반환 (DTO 조회)  (0) 2022.09.18
Querydsl - 상수, 문자 더하기  (0) 2022.09.18
Querydsl - Case 문  (0) 2022.09.18
Querydls - 서브 쿼리  (0) 2022.09.18
Comments