plugins {
id 'java'
id 'org.springframework.boot' version '2.7.18-SNAPSHOT'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
dependencies {
.
.
.
//querydsl 추가
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
.
.
.
}
.
.
.
// Querydsl 설정
def generated = 'src/main/generated'
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
sourceSets {
main.java.srcDirs += [ generated ]
}
clean {
delete file(generated)
}
build.gradle
을 위와 같이 작성하고 Entity 설계 후 gradle -> tasks -> other -> compileQuerydsl
을 클릭하면 위에서 설정한 위치에 Qclass
생성
spring.jpa.database=mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/querydsl
spring.datasource.username=***
spring.datasource.password=***
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
logging.level.org.hibernate.SQL=debug
DB 연결을 하고 작성한 Entity를 기반으로 테이블을 생성할 수 있으며 작성한 쿼리 로그를 확인할 수 있는 설정
@Test
public void startJPQL() {
String qlString =
"select m from Member m " +
"where m.username = :username";
Member findMember = em.createQuery(qlString, Member.class)
.setParameter("username", "member1")
.getSingleResult();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
@Test
public void startQuerydsl() {
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QMember m = new QMember("m");
Member findMember = queryFactory
.select(m)
.from(m)
.where(m.username.eq("member1"))//파라미터 바인딩 처리
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
Querydsl은 JPQL의 빌더로 파라미터 바인딩이 자동 처리
/*별칭 지정*/
QMember qMember = new QMember("m");
/*기본 인스턴스 사용*/
QMember qMember = QMember.member;
기본 인스턴스를 사용하기 위해서는 static import
를 같이 사용
import static study.querydsl.entity.QMember.*
@Test
public void startQuerydsl() {
Member findMember = queryFactory
.select(member)
.from(member)
.where(member.username.eq("member1"))
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
여기까지 test를 했다면 Querydsl 설정은 완료👌