QuerydslRepositorySupport
라는 구현체가 있다.
커스텀 repository에서 이를 상속 받아서 쓰면 몇가지 재밌는 기능을 제공 받을 수 있다.
// private final JPAQueryFactory queryFactory;
//
// public MemberRepositoryImpl(EntityManager em) {
// this.queryFactory = new JPAQueryFactory(em);
// }
public MemberRepositoryImpl() {
super(Member.class);
}
@Override
public List<MemberTeamDto> search(MemberSearchCondition condition) {
List<MemberTeamDto> result = from(member)
.leftJoin(member.team, team)
.where(
usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageBetween(condition.getAgeLoe(), condition.getAgeGoe())
)
.select(new QMemberTeamDto(
member.id.as("memberId"),
member.username,
member.age,
team.id.as("teamId"),
team.name.as("teamName")
))
.fetch();
페이징을 조금 쉽게 해준다.
JPQLQuery<MemberTeamDto> jpaQuery = from(member)
.leftJoin(member.team, team)
.where(
usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageBetween(condition.getAgeLoe(), condition.getAgeGoe())
)
.select(new QMemberTeamDto(
member.id.as("memberId"),
member.username,
member.age,
team.id.as("teamId"),
team.name.as("teamName")
));
JPQLQuery<MemberTeamDto> query = getQuerydsl().applyPagination(pageable, jpaQuery);
query.fetchResults();
from()
으로 시작 가능. QueryFactory를 사용해서 최근에는 select로 시작하는 것이 더 명시적QueryFactory
를 제공하지 않는다.