보통 Spring에서 JPA 개발을 진행할 때에는 Spring Data JPA를 dependency로 넣어놓고 쓴다.
기본적인 CRUD와 쿼리 메소드 기능을 제공하지만, 쿼리가 복잡해지거나 동적 쿼리를 작성해야 할 경우 코드가 상당히 지저분해진다. 그리고 오류도 잘 안 잡힘.
이때 QueryDSL을 쓰면 자바 코드로 쿼리를 깔끔하게 작성할 수 있다.
pom.xml
<properties>
<java.version>1.8</java.version>
<spring-data-jpa.version>1.8.0.RELEASE</spring-data-jpa.version>
<querydsl.version>3.6.3</querydsl.version>
<spring-framework.version>4.1.6.RELEASE</spring-framework.version>
<hibernate.version>4.3.10.Final</hibernate.version>
</properties>
querydsl을 사용하기 위해 위와 같이 버전을 잡아줬다.
Spring data JPA가 spring 버전에 의존성을 가지므로 서로 호환되는 버전으로 잡아줘야 한다.
로그백이나 junit은 그냥 잡아줌
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
querydsl dependency를 추가해준다.
querydsl을 사용하기 위한 시나리오는 이렇다.
dependency 추가 -> Entity 작성 -> maven clean install -> target폴더에 쿼리타입엔티티 생김!
그러니까 빌드시나리오도 작성해준다.
<build>
<plugins>
<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.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
pom.xml 끝!
refresh를 돌려준다.
Entity
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
빌드해서 쿼리타입을 만드려면 소스가 되는 엔티티를 작성해줘야 한다.
간단한 엔티티를 작성해준다.
Build
inteliJ 기준으로 프로젝트 우클릭 -> maven -> Generate sources and update folders 눌러주거나
maven창에서 clean이랑 install을 눌러준다.
이제 pom.xml 빌드에 적어준 대로 target 폴더 아래에 생긴 QItem.java를 import해서 자유롭게 쓰면 된다.
target folder 보이지 않거나 import가 안 될 때
인텔리제이의 경우 target폴더 기본 설정이 아마 excluded로 되어 있을 거다.
File > Project Structure(Ctrl+Alt+Shift+S)로 간다.
빨간색 Excluded로 되어 있는 target폴더를 Sources로 바꿔준다.
그러면 어플리케이션 코드에서도 target 폴더에 생성된 쿼리타입을 자유롭게 import해서 사용할 수 있다.
'Web > Spring' 카테고리의 다른 글
[Gradle] Failed to clean up stale outputs (0) | 2022.02.12 |
---|---|
[Spring] 빈 순환 참조 오류 (0) | 2022.01.16 |
[Mapper] MapStruct로 Dto/Entity 매핑하기(vs ModelMapper) (0) | 2021.11.07 |
[Mybatis/Pagination] PageHelper로 Paging처리하기 (0) | 2021.11.07 |
[Maven/Eclipse] 빌드 시 target/generated-sources 인식 못 하는 문제 (0) | 2021.11.07 |
댓글