관리 메뉴

Life goes slowly...

[JPA] JPA + Querydsl 코드 작성방법 본문

프로그래밍/Java

[JPA] JPA + Querydsl 코드 작성방법

빨강소 2026. 1. 29. 09:21
728x90
반응형

1. Querydsl이란?

Querydsl은 타입 세이프(Type-safe) 한 방식으로 JPQL을 작성할 수 있게 해주는 라이브러리입니다.

  • 문자열 JPQL 사용하지 말것 → 컴파일 시 오류 미검출
  • Querydsl 사용 → 컴파일 타임에 쿼리 오류 검출
  • 동적 쿼리에 매우 강함
  • JPA와 자연스럽게 결합

2. 의존성 설정 (Spring Boot + Gradle)

Gradle 설정

dependencies {
    implementation 'com.querydsl:querydsl-jpa'
    annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
    annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
    annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
}

 

 


3. Q 클래스 생성

  • Entity 기준으로 QEntity 클래스 자동 생성
@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;
    private String username;
    private int age;
}

-> 생성

QMember member = QMember.member;

 


4. Querydsl 기본 설정

JPAQueryFactory Bean 등록

@Configuration
public class QuerydslConfig {

    @PersistenceContext
    private EntityManager em;

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

 


5. 기본 조회 쿼리

//리스트 조회
public List<Member> findAll() {
    return queryFactory
        .selectFrom(member)
        .fetch();
}


//조건절
private BooleanExpression usernameEq(String username) {
    return username != null ? member.username.eq(username) : null;
}

queryFactory
    .selectFrom(member)
    .where(
        usernameEq("kim"),
        ageGoe(20)
    )
    .fetch();
    
 //Join 사용
 queryFactory
    .selectFrom(member)
    .join(member.team, team)
    .where(team.name.eq("개발팀"))
    .fetch();
    

//동적쿼리 - BooleanBuilder
BooleanBuilder builder = new BooleanBuilder();

if (username != null) {
    builder.and(member.username.eq(username));
}

queryFactory
    .selectFrom(member)
    .where(builder)
    .fetch();

 

728x90
반응형
Comments