- 개인 공부 목적으로 작성한 글입니다.
- 아래 출처를 참고하여 작성하였습니다.
- 계속 업데이트 할 예정입니다.
목차
- QueryDSL의 종류
- QueryDSL 구분
- 엔티티 클래스를 만들어서 사용하는 타입
- JPAQueryFactory
1. QueryDSL의 종류
- 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은 생략하고 사용합니다.
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<Emp> emps = queryFactory.selectFrom(emp)
.where(emp.ename.eq("SMITH"))
.fetch();
// selectFrom(emp) 메소드는 select(emp).from(emp) 선언의 축약형태입니다.
// eq 메소드는 "=" 연산자를 대체하는 메소드입니다.
출처
'JPA > QueryDSL' 카테고리의 다른 글
QueryDSL 적용방법 (3가지) (0) | 2021.10.12 |
---|