Home 설정 방법
Post
Cancel

설정 방법

QueryDSL을 사용하기 위한 설정 방법

  • build.gradle 추가
1
2
3
4
5
6
7
8
9
10
//Querydsl 추가 
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'  
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"  
annotationProcessor "jakarta.annotation:jakarta.annotation-api"  
annotationProcessor "jakarta.persistence:jakarta.persistence-api"


clean {
	delete file('src/main/generated')
}

환경설정 검증

  • 검증용 엔티티 생성
1
2
3
4
5
6
7
@Entity
@Getter @Setter
public class Hello {
	
	@Id @GeneratedValue
	private Long id;
}

이렇게 설정을 완료하고 엔티티가 존재한다고 가정한 후.

  • Gradle 탭 -> Tasks -> build -> clean
  • Gradle 탭 -> -> Tasks -> other -> compileJava

이러한 과정을 거치면

build > generated 하위 폴더에 QHello 라는 파일이 생긴 것이 확인이 되어야 한다.

참고

Generated의 Q파일은 Git같은 곳에 관리되면 안된다.

보통 build 폴더는 ignore가 되어있기 때문에 따로 설정할 필요는 없지만 다른 경로에 넣을 경우도 있기 때문에 알아두자.

검증 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@SpringBootTest  
@Transactional  
class QuerydslApplicationTests {  
  
	@Autowired  
	EntityManager em;  
	  
	  
	@Test  
	void contextLoads() {  
		Hello hello = new Hello();  
		em.persist(hello);  
		  
		JPAQueryFactory query = new JPAQueryFactory(em);  
		QHello qHello = new QHello("h");  
		  
		Hello result = query  
				.selectFrom(qHello)  
				.fetchOne();  
		  
		assertThat(result).isEqualTo(hello);  
		assertThat(result.getId()).isEqualTo(hello.getId());  
	}  
}

위 테스트가 성공한다면 정상적으로 설정이 완료된 것이다.

참고

만약 테스트 작성 시 QHello가 정상적으로 Import 되지 않는다면

IDE 설정에서 Build, Execution, Deployment > Build Tools > Gradle에서

Build and run using이 gradle로 설정되어 있는지 확인해야 한다.

gradle로 설정 후 apply를 하자.

JPQL vs QueryDSL

  • JPQL
1
2
3
4
5
6
7
8
@Test  
public void startJPQL() {  
	Member findByJPQL = em.createQuery("select m from Member m where m.username= :username", Member.class)  
			.setParameter("username", "member1")  
			.getSingleResult();  
	  
	assertThat(findByJPQL.getUsername()).isEqualTo("member1");  
}
  • Querydsl
1
2
3
4
5
6
7
8
9
10
11
12
13
@Test  
public void startQuerydsl() {  
	JPAQueryFactory queryFactory = new JPAQueryFactory(em);  
	QMember m = new QMember("m");  
	  
	Member findByQuerydsl = queryFactory  
			.select(m)  
			.from(m)  
			.where(m.username.eq("member1"))  
			.fetchOne();  
	  
	assertThat(findByQuerydsl.getUsername()).isEqualTo("member1");  
}
  • Querydsl은 JPQL 빌더이다.
  • JPQL = 문자
  • Querydsl = 코드
    • 컴파일 시점에 오류를 잡아준다.
  • 파라미터 바인딩 처리
    • JPQL = 직접
    • Querydsl = 자동 처리
This post is licensed under CC BY 4.0 by the author.