본문 바로가기
JPA/QueryDSL

about QueryDSL

by BAYABA 2021. 10. 13.
  1. 개인 공부 목적으로 작성한 글입니다.
  2. 아래 출처를 참고하여 작성하였습니다.
  3. 계속 업데이트 할 예정입니다.

목차

  1. QueryDSL의 종류
  • QueryDSL 구분
  1. 엔티티 클래스를 만들어서 사용하는 타입
  • JPAQueryFactory

1. QueryDSL의 종류

  1. QueryDSL은 엔티티로 설정된 모델 클래스와 동일한 패키지에 'Q모델'이라는 쿼리타입 클래스를 미리 생성해놓고 메타데이터로 사용하여 쿼리를 메소드 기반으로 작성합니다.

QueryDSL 구분

  1. 쿼리문을 작성하기 위해서 모두 Q 타입 클래스를 사용합니다.
  2. JPAQuery, JPAQueryFactory 클래스를 사용하면 EntityManager를 통해서 질의가 처리되고 이 때 사용하는 쿼리문은 JPQL 입니다.


2. 엔티티 클래스를 만들어서 사용하는 타입

JPAQueryFactory

  1. JPAQueryFactory로 JPAQuery를 만들어서 사용하는 방식입니다.
  2. JPAQueryFactory를 Bean 컨테이너에 등록해 놓고 주입받아 사용하면 편리합니다.
@Configuration
public class QuerydslConfiguration {

  @PersistenceContext
  private EntityManager entityManager;

  @Bean
  public JPAQueryFactory jpaQueryFactory() {
    return new JPAQueryFactory(entityManager);
  }

}

  1. JPAQueryFactory는 JPQLQueryFactory 인터페이스를 구현했으며 JPAQuery 인스턴스를 포함하여 다양한 방법으로 쿼리 할 수 있습니다.
  2. 생성할 때 EntityManager만 인자로 넣어 생성할 수도 있고 JPQLTemplate도 같이 인자로 줘서 생성 가능합니다.
  • 다이나믹하게 데이터베이스가 바뀌는 경우는 거의 없기 때문에 보통 JPQLTemplate은 생략하고 사용합니다.
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<Emp> emps = queryFactory.selectFrom(emp)
                            .where(emp.ename.eq("SMITH"))
                            .fetch();

// selectFrom(emp) 메소드는 select(emp).from(emp) 선언의 축약형태입니다.
// eq 메소드는 "=" 연산자를 대체하는 메소드입니다.

출처

  1. Querydsl 입문, 장점, Querydsl의 종류, 구문, SQLQuery, SQLQueryFactory, JPAQuery…

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

QueryDSL 적용방법 (3가지)  (0) 2021.10.12