Query를 자바코드로 만들 수 있게 해주는 것이다.
타입 세이프하다.
Predicate라는 인터페이스 자바코드로 조건문을 표현할 수 있다. 조건문들을 조합할 수도 있고 따로 관리 할 수도 있다.
위의 장점들 때문에 QueryDSL을 사용한다.
기존의 방법으로 메서드를 만들 때, 조건이 많아질수록 이해하기가 힘들어진다.
ex. findByFirstNameIgnoreCaseAndLastName....
이런 문제를 해결하기 위해 스프링 데이터가 QuerydslPredicateExecutor라는 인터페이스를 제공해준다.
딱 2가지만 기억하면 된다.
QueryDSL을 사용해보겠다.
먼저 프로젝트를 새로 생성해주고 아래와 같이 간단한 Account 엔티티와 리포지토리를 만들어준다.
QueryDSL을 사용하기 위해서는 의존성을 추가해줘야한다.
QueryDSL은 springboot가 의존성을 관리해준다. 따라서 버전은 따로 명시해주지않아도 된다.
// 코드를 생성해주는 모듈
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
plugin도 추가해줘야한다.
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
그 후 Maven compile을 해준다.
그리고 나면 이렇게 Account에 대한 Query Language를 만들어준다.
그리고나서, repository에 QuerydslPredicateExecutor를 상속받는다.
그러면 이제 findOne과 findAll을 사용 할 수 있게된다.
Test 클래스에서 실행해보겠다.
QAccount를 선언하고 Predicate(querydsl꺼)를 생성해서 쿼리를 작성 후, findOne이나 findAll로 predicate을 넘겨주면 된다.