티스토리 뷰





반응형

build.gradle.kts

plugins {
	java
	id("org.springframework.boot") version "3.4.2"
	id("io.spring.dependency-management") version "1.1.7"
}

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(21)
	}
}

repositories {
	mavenCentral()
}

dependencies {

	// Querydsl 추가
	implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
	annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta")
	annotationProcessor("jakarta.annotation:jakarta.annotation-api")
	annotationProcessor("jakarta.persistence:jakarta.persistence-api")
}

// Querydsl -> QClass 파일 생성 위치를 지정
val generated = "src/main/generated"
tasks.withType<JavaCompile> {
	options.generatedSourceOutputDirectory.set(file(generated))
}

// Querydsl -> 생성된 Q 클래스 파일들을 main 소스셋의 한 부분으로 포함시켜 다같이 컴파일 되로록 설정
sourceSets["main"].java.srcDir(generated)

// Querydsl -> clean 작업 시 지정한 generated 디렉토리를 삭제하여 Q 클래스 싹 정리 (재빌드필요)
tasks.named<Delete>("clean") {
	delete(file(generated))
}

그래들 파일 전체를 올린것은 아니고 민감한 정보를 일부 제거했다.

설정만 보고 싶으면 Querydsl 부분만 참고하면 된다.

QueryDslConfig

package com.example.global.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

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

적당한 위치에 config 파일을 생성해주자

QClass 생성

프로젝트 빌드를 하게 되면 아래와 같이 우리가 지정한 경로에 QClass가 생긴다.

저기 열어보면 Entity 기반으로 QClass가 생성된다.

그러므로 사전에 Entity을 만들어야한다.

나같은 경우에는 DB 연결해둔게 있어서 그걸 기반으로 User만 만들었다.

UserRepository 테스트

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class UserRepository {
	
    private final JPAQueryFactory queryFactory;
    private static final QUser user = QUser.user;

    public UserRepository(JPAQueryFactory queryFactory) {
        this.queryFactory = queryFactory;
    }

    public List<User> findByUser(String username) {
        return queryFactory
                .selectFrom(user)
                .where(user.username.eq(username))
                .fetch();
    }
}

이렇게 설정하고 api, service 구현해서 포스트맨으로 호출해보면 데이터를 잘 리턴하게된다.

 

반응형

'Back-end > JPA' 카테고리의 다른 글

자바 ORM 표준 JPA 기본값 타입, 임베디드 타입  (0) 2023.06.01
자바 ORM 표준 JPA 프록시  (0) 2023.05.31
자바 ORM 표준 JPA 벌크 연산  (0) 2023.05.30
자바 ORM 표준 JPA fetch join  (0) 2023.05.29
JPA @MappedSuperclass  (0) 2023.05.28
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31