이 글은 QueryDSL의 2가지 방법 중 2번째 방법이다. 사용자 정의 인터페이스 설계 후 QueryDslRepositorySupport 상속받는 것이다.
1. pom.xml에 querydsl dependency 추가(이전 글 참고)
2. 사용자 정의 인터페이스 설계
package com.example.mart.repository;
import com.example.mart.entity.Item;
import com.example.mart.entity.Member;
import java.util.List;
public interface QueryDslOrderRepository {
public List<Object[]> joinList();
public List<Member> members();
public List<Item> items();
}
3. 사용자 정의 인터페이스를 구현하는 클래스 작성
package com.example.mart.repository;
import com.example.mart.entity.Item;
import com.example.mart.entity.Member;
import com.example.mart.entity.Order;
import com.example.mart.entity.QItem;
import com.example.mart.entity.QMember;
import com.example.mart.entity.QOrder;
import com.example.mart.entity.QOrderItem;
import com.querydsl.core.Tuple;
import com.querydsl.jpa.JPQLQuery;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
public class QueryDslOrderRepositoryImpl
extends QuerydslRepositorySupport
implements QueryDslOrderRepository {
public QueryDslOrderRepositoryImpl() {
super(Order.class);
}
@Override
public List<Object[]> joinList() {
QMember member = QMember.member;
QOrder order = QOrder.order;
QOrderItem orderItem = QOrderItem.orderItem;
JPQLQuery<Order> query = from(order);
query.join(order.member, member).leftJoin(order.orderItems, orderItem);
JPQLQuery<Tuple> tuple = query.select(member, order, orderItem);
List<Tuple> result = tuple.fetch();
List<Object[]> list = result
.stream()
.map(t -> t.toArray())
.collect(Collectors.toList());
return list;
}
@Override
public List<Member> members() {
// select * from member where name = 'user1' order by name desc
QMember member = QMember.member;
JPQLQuery<Member> query = from(member);
query.where(member.name.eq("user1")).orderBy(member.name.desc());
JPQLQuery<Member> tuple = query.select(member);
List<Member> list = tuple.fetch();
return list;
}
@Override
public List<Item> items() {
// select * from item where name='바지' and price>20000
QItem item = QItem.item;
JPQLQuery<Item> query = from(item);
query.where(item.name.eq("바지").and(item.price.gt(20000)));
JPQLQuery<Item> tuple = query.select(item);
List<Item> list = tuple.fetch();
return list;
}
}
'Backend > Spring' 카테고리의 다른 글
실수하는 것들, 주의할점들 (0) | 2024.04.16 |
---|---|
Pageable 객체 (0) | 2024.04.12 |
QueryDSL(1) (0) | 2024.04.12 |
Native Sql (0) | 2024.04.12 |
JPQL (0) | 2024.04.11 |