본문 바로가기
Web/Spring

[Maven] QueryDSL 사용하기

by 정고정 2022. 1. 2.
반응형

보통 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해서 사용할 수 있다. 

반응형

댓글