실무에선 조건에 따라 실행되는 동적 쿼리가 많이 사용 된다.
복잡해져서 답 없는 미친 쿼리들을 작성하지 않기 위해 QueryDSL을 이용해보자.
우선 설정정보의 디펜던시에 querydsl을 추가 한다.
dependencies {
implementation 'com.querydsl:querydsl-jpa'
implementation 'com.querydsl:querydsl-apt'
}
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslDir
}
gradle 에서 compileQuerydsl을 활성화 시키면 새로운 폴더에 Q가 붙은 클래스들이 자동으로 생성된다.
(기존의 클래스에서 앞에 Q가 붙음)
이 클래스들을 이용해서 쿼리를 작성한다.
public List<Order> findAll(OrderSearch orderSearch){
QOrder order = QOrder.order;
QMember member = QMember.member;
JPAQueryFactory query = new JPAQueryFactory(entityManager);
return query
.select(order)
.from(order)
.join(order.member, member)
.where(order.status.eq(orderSearch.getOrderStatus()), member.name.like(orderSearch.getMemberName()))
.limit(1000)
.fetch();
}