QueryDSL은 엔티티로 설정된 모델 클래스와 동일한 패키지에 'Q모델'이라는 쿼리타입 클래스를 미리 생성해놓고 메타데이터로 사용하여 쿼리를 메소드 기반으로 작성합니다.
QueryDSL 구분
쿼리문을 작성하기 위해서 모두 Q 타입 클래스를 사용합니다.
JPAQuery, JPAQueryFactory 클래스를 사용하면 EntityManager를 통해서 질의가 처리되고 이 때 사용하는 쿼리문은 JPQL 입니다.
2. 엔티티 클래스를 만들어서 사용하는 타입
JPAQueryFactory
JPAQueryFactory로 JPAQuery를 만들어서 사용하는 방식입니다.
JPAQueryFactory를 Bean 컨테이너에 등록해 놓고 주입받아 사용하면 편리합니다.
@Configuration
public class QuerydslConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
JPAQueryFactory는 JPQLQueryFactory 인터페이스를 구현했으며 JPAQuery 인스턴스를 포함하여 다양한 방법으로 쿼리 할 수 있습니다.
생성할 때 EntityManager만 인자로 넣어 생성할 수도 있고 JPQLTemplate도 같이 인자로 줘서 생성 가능합니다.
다이나믹하게 데이터베이스가 바뀌는 경우는 거의 없기 때문에 보통 JPQLTemplate은 생략하고 사용합니다.