[Spring Boot] Querydsl 설정하기

전수·2023년 10월 24일
0

Spring

목록 보기
11/13

프로젝트 세팅

  • spring boot : 2.7.18(SNAPSHOT)
  • build : gradle
  • java : 11
  • DB : mysql

gradle 설정

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 생성

application.properties

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를 기반으로 테이블을 생성할 수 있으며 작성한 쿼리 로그를 확인할 수 있는 설정

JPQL VS Querydsl

@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의 빌더로 파라미터 바인딩이 자동 처리

Q-Type

/*별칭 지정*/
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 설정은 완료👌

0개의 댓글

관련 채용 정보