QueryDSL : JPQL 을 편하게 작성하도록 도와주는 빌더 클래스 모음(비표준 오픈소스 프레임워크)
앞에서 2개의 쿼리 작성법에 대해 포스팅했다. QueryDSL은 3번째 방법이며 2가지로 나뉜다. 첫번째는 QuerydslPredicateExecutor를 사용하는 것이고 두번째는 사용자 정의 인터페이스 설계 후 QueryDslRepositorySupport 상속받는 것이다. 이 글에서는 QuerydslPredicateExecutor에 관한 내용이다.
특징 : 쿼리를 문자가 아닌 코드로 작성해도 쉽고, 간결하며 모양도 쿼리와 비슷하게 개발
: 다양한 상황에 맞게 쿼리를 생성해야 하는 경우 사용 ⇨ 동적 쿼리
1. pom.xml에서 querydsl dependency 추가하기
2. target/generated-sources 파일에 QEntity파일명.java 생성 확인
3. Repository에서 QuerydslPredicateExecutor 상속받기
4-1. Test하기
@Test
public void testQueryDsl() {
// QProduct 가져오기
QProduct product = QProduct.product;
Iterable<Product> products = productRepository.findAll(product.name.eq("Product1"));
// 제품명이 Product10이고 가격이 5000 초과인 제품 조회
// gt : greater than
products = productRepository.findAll(product.name.eq("Product10").and(product.price.gt(5000)));
// 제품명이 Product10이고 가격이 5000 이상인 제품 조회
BooleanBuilder builder = new BooleanBuilder();
builder.and(product.name.eq("Product10"));
builder.and(product.price.goe(5000));
products = productRepository.findAll(builder);
// 제품명에 Product 글자가 포함된 제품 조회
products = productRepository.findAll(product.name.contains("Product"));
// 제품명에 Product 글자로 시작하는 제품 조회
products = productRepository.findAll(product.name.startsWith("Product"));
// 제품명에 Product 글자로 끝나는 제품 조회
products = productRepository.findAll(product.name.endsWith("Product"));
for (Product pro : products) {
System.out.println(pro);
}
}
4-2. Test하기
@Test
public void testQueryDsl2() {
QMember2 member2 = QMember2.member2;
BooleanBuilder builder = new BooleanBuilder();
builder.and(member2.userName.eq("User1"));
Iterable<Member2> list = member2Repository.findAll(builder, Sort.by("id").descending());
for (Member2 member : list) {
System.out.println(member);
}
}
'Backend > Spring' 카테고리의 다른 글
Pageable 객체 (0) | 2024.04.12 |
---|---|
QueryDSL(2) (0) | 2024.04.12 |
Native Sql (0) | 2024.04.12 |
JPQL (0) | 2024.04.11 |
영속성 전이 : CASCADE (0) | 2024.04.08 |