실전! Querydsl

Ch02. 기본 문법 - JPQL vs Querydsl, 기본 Q-Type 활용

webmaster 2021. 12. 30. 10:59
728x90

JPQL

jpql

  • 문제점 : jpql은 문자열이기 때문에 중간에 오류가 발생하여도 런타임에 잡을 수밖에 없다.

QueryDsl

QueryDsl
JPAQueryFactory를 사용하면 된다.

  • QueryDsl로 작성하면 컴파일 시점에 문법 오류를 발견할 수 있다.
  • EntityManager로 JPAQueryFactory 생성
  • Querydsl은 JPQL 빌더
  • JPQL: 문자(실행 시점 오류), Querydsl: 코드(컴파일 시점 오류)
  • JPQL: 파라미터 바인딩 직접, Querydsl: 파라미터 바인딩 자동 처리

JPAQueryFactory를 필드로 제공하면 동시성 문제는 어떻게 될까?

동시성 문제는 JPAQueryFactory를 생성할 때 제공하는 EntityManager(em)에 달려있다. 스프링 프레임워크는 여러 스레드에서 동시에 같은 EntityManager에 접근해도, 트랜잭션마다 별도의 영속성 컨텍스트를 제공하기 때문에, 동시성 문제는 걱정하지 않아도 된다.

Q 클래스 인스턴스를 사용하는 2가지 방법

QMember qMember = new QMember("m"); //별칭 직접 지정

QMember qMember = QMember.member; //기본 인스턴스 사용

QMember를 new 키워드로 생성하거나 이미 만들어지 QMemeber를 사용하면 된다.
yml 수정으로 JPQL 확인 가능
주석으로 jpql을 볼수 잇다

  • Jpql에 실행되는 쿼리를 보고 싶다면, application.yml를 수정하면 된다.
  • jpql에서의 Alias를 바꾸고 싶다면 new QMember에서의 이름을 바꾸어 주면 된다(static import 해서 사용하게 된다면 해당 이름이 기본적으로 클래스명 1 이렇게 되기 때문에 현재는 member1이 된 것이다)
728x90