QueryDsl 사용해보기

no.oneho·2023년 9월 7일
0

한입만 프로젝트

목록 보기
1/1

build.gradle

buildscript {
    ext {
    	//QueryDsl 버전 변수
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.15'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    //QueryDsl 플러그인
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

group = 'com.supercoding'
version = '0.0.1-SNAPSHOT'


java {
    sourceCompatibility = '11'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'io.springfox:springfox-boot-starter:3.0.0'
    implementation 'io.springfox:springfox-swagger-ui:3.0.0'
    implementation 'org.slf4j:slf4j-api:1.7.31'
    implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'

	//QueryDsl 의존성
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"

    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // JWT 라이브러리
    implementation "io.jsonwebtoken:jjwt:0.9.1"

    // 스프링 시큐리티 라이브러리
    implementation 'org.springframework.boot:spring-boot-starter-security'
    testImplementation 'org.springframework.security:spring-security-test'

    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

tasks.named('test') {
    useJUnitPlatform()
}

//QueryDsl 기타 설정

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

gradle > other > compileQuerydsl 실행


gradle에 명시한 path로 가보면

QEnttiy들 생성 완료

config file 생성

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }

}

Repository 구조는 처음 JPA와 병행하며 사용해야해서 도메인당 3개의 파일로 구성

oooCustomRepository (인터페이스 생성)

public interface ShopCustomRepository {

    ViewShopListResponse findShopListWithNextCursor(ViewShopListRequest viewShopListRequest , Double latitude, Double longitude);

}

oooCustomRepositoryImpl (oooCustomRepository을 상속 받아 QueryDsl을 사용할 구현 클래스)

@Repository
@RequiredArgsConstructor
public class ShopCustomRepositoryImpl implements ShopCustomRepository {

    private final JPAQueryFactory jpaQueryFactory;

    @TimeTrace
    @Override
    public ViewShopListResponse findShopListWithNextCursor(ViewShopListRequest request, Double latitude, Double longitude) {
		//구현 부분
    }
}

다음 포스팅은 처음 써보는 QueryDSL로 커서 페이지네이션을 구현해보는 내용을 작성해보겠다.

profile
안녕하세요 백엔드 개발자를 지망하고있는 노원호라고합니다.

0개의 댓글

관련 채용 정보