[TIL] 50. QueryDSL

김지수·2024년 7월 2일

TIL

목록 보기
51/53

QueryDSL


QueryDSL은 타입 안전한 쿼리를 작성하기 위한 Java 라이브러리입니다. 주로 JPA와 함께 사용되며, SQL, JDO, MongoDB 등 다양한 데이터 소스와 함께 사용할 수 있습니다. QueryDSL은 자바 코드로 쿼리를 작성할 수 있도록 지원하여, 동적 쿼리를 보다 간결하고 타입 안전하게 작성할 수 있게 해줍니다.

주요 특징

타입 안전성

쿼리를 작성할 때 컴파일 시점에 타입 검사를 통해 오류를 방지합니다.

간결한 쿼리 작성

자바 코드로 쿼리를 작성하므로 가독성이 높고 유지보수가 용이합니다.

동적 쿼리 작성 용이

조건에 따라 동적으로 쿼리를 구성할 수 있어 복잡한 쿼리 작성이 가능합니다.

gradle 설정

dependencies {
    implementation 'com.querydsl:querydsl-jpa:5.0.0'
    implementation 'com.querydsl:querydsl-apt:5.0.0'
    annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
}

QueryDSL 설정

QueryDSL을 사용하기 위해서는 엔티티 클래스의 Q 클래스가 필요합니다. Q 클래스는 querydsl-apt 라이브러리를 통해 자동으로 생성됩니다. 예를 들어, User 엔티티의 Q 클래스는 QUser로 생성됩니다.

QUser user = QUser.user;

간단한 쿼리

JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
List<User> users = queryFactory.selectFrom(user)
                               .where(user.name.eq("John"))
                               .fetch();

동적 쿼리 작성

public List<User> findUsers(String name, String email) {
    JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
    QUser user = QUser.user;
    
    BooleanBuilder builder = new BooleanBuilder();
    if (name != null) {
        builder.and(user.name.eq(name));
    }
    if (email != null) {
        builder.and(user.email.eq(email));
    }
    
    return queryFactory.selectFrom(user)
                       .where(builder)
                       .fetch();
}


오늘의 회고


QueryDSL 에 대해서 공부를 하였다. 아직 많이 부족한 걸 느낀다. 연습을 많이해야겠다.

profile
서툴고 부족한 점이 많지만, 배우고 발전하며 성장하기 위해 노력하겠습니다.

0개의 댓글