QueryDSL

Query를 자바코드로 만들 수 있게 해주는 것이다.

타입 세이프하다.

Predicate라는 인터페이스 자바코드로 조건문을 표현할 수 있다. 조건문들을 조합할 수도 있고 따로 관리 할 수도 있다.

위의 장점들 때문에 QueryDSL을 사용한다.

기존의 방법으로 메서드를 만들 때, 조건이 많아질수록 이해하기가 힘들어진다.
ex. findByFirstNameIgnoreCaseAndLastName....

이런 문제를 해결하기 위해 스프링 데이터가 QuerydslPredicateExecutor라는 인터페이스를 제공해준다.

딱 2가지만 기억하면 된다.

  • findAll: Optional을 리턴한다.
  • findOne: List / Page 등 여러가지로 리턴한다.

예제

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을 넘겨주면 된다.

0개의 댓글