본문 바로가기

Spring

QueryDSL

QueryDSL 이란 ?

- 스프링에서 Type-Safe한 쿼리르 보장하기 위해 제공되는 Domain Specific Language

- 일반적으로 SQL은 Type Check가 불가능하고 실행되기 전까지 작동 여부를 확인하기가 어렵다. QueryDSL은 이러한 부분을 보완하여 Java로 Type-Safe 하게 개발할 수 있도록 제공해주는 프레임워크 이다

- Repository 인터페이스에서 메서드명이 너무 길어지거나, 메서드명으로 쿼리문을 만들기 까다로운 조건일 때 유용하게 쓰일 수 있다

 

왜 필요할까?

- 위에서 언급한 것처럼 Type Check가 불가능하고 실행되기 전까지 작동여부를 알 수 없음을 보완하기 위해서

- SQL이 class처럼 Type이 있고 Java코드로 작성할수 있으면 편하지 않을까? 하는 생각에

 

QueryDSL은 어떻게 작동할까?

Querydsl -> JPQL -> SQL

 

잠깐, JPQL은 뭘까?

Java Persistene Query Language로 지속적 엔티티를 저장하는 데 사용되는 메커니즘이다.

말이 어려운데, 일반적으로 SQL의 경우 테이블을 대상으로 조회하지만 JPQL은 테이블이 아닌 JPA 엔티티를 대상으로 조회하는 언어라고 이해하면 된다. 그러므로 JPQL의 쿼리에는 테이블이 아닌 엔티티에서 표현하고 있는 컬럼의 이름을 써 주어야 한다.

 

어떻게 사용할수 있을까?

대략적으로 흐름정도만 파악하고 상세사용법은 아래 링크를 통해 참고하도록

QueryDSL 사용해보기/ QueryDslREpositorySupport 클래스 활용하기

 

1) 필요 라이브러리의 종속성 셋팅한다(querydsl-jpa, querydsl-apt)

2) 사용할 entity를 만든다

3) JpaRepository<EntityType, IdType>을 extends하는 repository 인터페이스를 만든다

4) 커스텀 한 메서드를 정의하기 위한 CustomEntityTypeRepository 인터페이스를 만든다

5) 4)에서 만든 인터페이스의 구현체를 만들고, QuerydslRepositorySupport를 상속받도록 한다(이 클래스는 QueryDsl 사용할 수 있다)

6) 3)에서 만든 Repository에 4)에서 만든 커스텀 Repository를 상속 받도록 한다

'Spring' 카테고리의 다른 글

AbstractRoutingDataSource  (0) 2020.01.28
Spring Cloud Data Flow  (0) 2020.01.06
토비의 스프링 2장 - 테스트  (0) 2019.06.02
토비의 스프링 1장 - 오브젝트와 의존관계  (0) 2019.06.01