querydsl 설정하기

2019-09-27



1. QueryDSL 을 선택한 이유?

스프링 부트 + JPA 를 선택하면서 고민했던 사항이 테이블 연결이었다.

JPQL로 간단하게 쿼리문을 불러오는 것이 아닌, 내가 원하는 쿼리문을 사용하기 어렵다는 문제점 때문이었다.

많은 블로그에서 탐색한 결과, QueryDsl을 선택하였다. 비교적 직관적이며, join 중에서도 left outer join / right outer join 등 다양한 조인과 동적쿼리문 작성이 가장 좋아보였다. 사실은 criteriaBuilder를 사용할까 했는데 QueryDsl이 더 직관적이라 선택하였다. 조금 더 보기 편하달까.. 생각보다 많은 레퍼런스와 doc(문서)가 있고, 심지어 한글로 문서번역이 되어있어 편했다. maven 설정할 때 조금 애먹긴 했지만..



2. maven 설정

레퍼런스에서는 gradle로 설정하는 방법이 많이 있는데 아직 초보개발자인 나로서는 (=배운 지식 활용하기에도 벅찬,,) 감수할 수 없는 위험이라 판단, 조금 더 친숙한 maven으로 dependency를 설정하였다.

2-1 dependency 설정

<!-- querydsl -->
<dependency>
	<groupId>com.querydsl</groupId>
	<artifactId>querydsl-apt</artifactId>
	<version>${querydsl.version}</version>
	<scope>provided</scope>
</dependency>

<dependency>
	<groupId>com.querydsl</groupId>
	<artifactId>querydsl-jpa</artifactId>
	<version>${querydsl.version}</version>
</dependency>

2-2 plug-in 설정

<!-- querydsl 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>



3. 플러그인 추가시 문제점 발생

플러그인을 추가할때 부분에서 에러가 발생했다.

오류메세지는 You need to run build with JDK or have tools.jar on the classpath.

!!주의!! 이 오류메세지가 뜨면 QClass 자체가 생성이 안되어 QueryFactory 사용 자체를 할 수가 없게된다.

QClass란? QueryDsl에서 제공하는 클래스. 도메인(repository) 클래스가 자동으로 QClass로 변환되며(target/generated-sources/java 패키지에 자동 생성) 이 클래스를 QueryFactory에 주입하여 사용하게 된다.



4. 문제점 해결

해결방법은 생각보다 간단하다.

  1. 이클립스 설치경로 혹은 STS 설치경로에 eclipse.ini 혹은 STS.ini 파일을 연다

  2. 아래의 두 줄을 추가하면 됨. 주의할 점은 -vmargs 설정 전에 써줘야 한다.

    -vm
    C:\Program Files\Java\jdk1.8.0_211\bin\javaw.exe
    

    생각없이 사람들이 쓴 걸 복붙했는데 \ 대신에 /로 루트설정이 되어있어서 sts실행 자체가 안되었었다. 사소한 부분이지만 루트는 역슬래쉬..!!

  3. STS실행

  4. 해당 프로젝트 우클릭 > maven > Update Project.. 클릭하고 메이븐업데이트 및 클린 시키면 된다 !