Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Github Actions
- JPA
- 프로그래머스
- Kafka
- Intellij
- algorihm
- rabbitmq
- 객체지향원칙
- springboot
- 어노테이션
- querydls
- 멀티 모듈
- CI/CD
- JWT
- swagger
- Java
- 테스트 코드
- DevOps
- MSA
- Til
- testcode
- aop
- Redis
- trouble shooting
- EC2
- spring boot
- AWS
- 유효성 검사
- algorithm
- docker
Archives
- Today
- Total
개발노트
25.02.19 QueryDSL 본문
개요
queryDSL 에 대해 공부가 필요할 것 같다. 정리해본다.
QueryDSL 이란?
타입 안전(type-safe) 하고 직관적인 Java 기반의 동적 SQL 쿼리 빌더 이다.
주로 JPA, Hibernate, SQL, MongoDB 등의 데이터베이스와 함께 사용되며, 코드 기반으로 SQL 쿼리를 작성할 수 있도록 도와주는 프레임 워크다.
특징
타입 안정성( Type-safety )
- 컴파일 단계에서 SQL 문법 오류를 잡을 수 있다.
- 필드명을 직접 문자열로 입력하는 것이 아니라 코드 기반으로 사용하여, 오타로 인한 오류가 방지된다.
가독성 및 유지보수성 증가
- JPQL이나 SQL을 직접 문자열로 작성하는 방식보다 코드가 직관적
- IDE의 자동 완성 기능을 활용 가능
동적 쿼리 작성이 용이
- BooleanBuilder 를 활용하여 조건을 유동적으로 추가 기능
- 복잡한 동적 쿼리를 쉽게 구성할 수있음
JPA 및 다양한 데이터베이스 지원
- Spring Data JPA와 호환되어 JPARepository와 함께 사용 가능
- SQL, MongoDB, Lucene 등 다양한 데이터 소수와 연동
QueryDSL 사용법
1. 의존성 추가
먼저 QueryDSL을 사용하려면 build.gradle에 의존성을 추가해야한다.
dependencies {
implementation 'com.querydsl:querydsl-jpa:5.0.0' // QueryDSL JPA 지원
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa' // QClass 자동 생성
}
2. QClass 생성
QueryDLS은 엔티티 클래스를 기반으로 QCLass(QueryDSL 전용 클래스)를 생성한다.
./gradlew compileQuerydsl 명령어를 실행하면 Qclass가 자동 생성된다.
@Entity 어노테이션이 적용된 클래스를 기준으로 QClass가 생성된다.
Qclass가 생성되어야 QueryDSL을 사용할 수 있다.
3. QueryDSL 기본 쿼리 작성
@Autowired
private JPAQueryFactory queryFactory;
public User findByUsername(String username) {
QUser user = QUser.user; // QueryDSL에서 제공하는 Q클래스
return queryFactory
.selectFrom(user)
.where(user.username.eq(username)) // username이 같은 데이터 조회
.fetchOne(); // 단일 결과 반환
//fetch() 는 리스트로 전체 리스트 조회
}
4. 동적 쿼리 작성
BooleanBuilder를 활용한 동적 쿼리
여러 검색 조건을 조합하여 데이터를 조회할 경우, BooleanBuilder를 활용하면된다.
public List<User> searchUsers(String username, Integer age) {
QUser user = QUser.user;
BooleanBuilder builder = new BooleanBuilder();
if (username != null) {
builder.and(user.username.eq(username));
}
if (age != null) {
builder.and(user.age.gt(age));
}
return queryFactory
.selectFrom(user)
.where(builder)
.fetch();
}
조건이 null인 경우는 where절에서 제외되므로 동적인 조건 처리가 가능하다.
정리
- QueryDSL은 타입 안전한 동적 SQL/JPA 쿼리 빌더로 코드기반으로 SQL을 작성할 수 있다.
- JPQL보다 가동석이 높고 유지보수가 용이
- BooleanBuilder 등을 이용해 동적 쿼리 작성이 가능
- JPAQueryFactory를 사용하여 손쉽게 데이터를 조회 가능
spring boot 로 프로젝트를 하는거면 사용하는게 더욱 좋을 거 같다.
'Spring Boot' 카테고리의 다른 글
25.02.25 통합테스트 DB 환경 분리 (0) | 2025.02.25 |
---|---|
25.02.20 JWT 리팩토링 과 헥사고날 아키텍처 도입 (0) | 2025.02.20 |
25.02.17 JWT 검증 필터 와 테스트 코드 any() (0) | 2025.02.17 |
25.02.13 Spring Boot AOP (0) | 2025.02.13 |
25.02.12 Spring Boot JPA 에서 엔티티 간의 연관관계 매핑 (0) | 2025.02.12 |