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 에 대해서 공부를 하였다. 아직 많이 부족한 걸 느낀다. 연습을 많이해야겠다.