π₯οΈ λ°±μλ/SpringBoot
[Querydsl] SpringDataJPA + Querydsl + μ¬μ©μ μ μ μΈν°νμ΄μ€
OR15A
2024. 1. 7. 23:45
μ¬μ©μ μ μ μΈν°νμ΄μ€ μμ±
public interface MemberRepositoryCustom {
List<MemberTeamDto> search(MemberSearchCondition condition);
}
- SpringDataJPAκ° μ 곡νλ λ©μλ μΈμ νμν λ©μλκ° μμ λ
μ¬μ©μ μ μ μΈν°νμ΄μ€ ꡬν
public class MemberRepositoryImpl implements MemberRepositoryCustom {
private final JPAQueryFactory queryFactory;
public MemberRepositoryImpl(EntityManager em) {
this.queryFactory = new JPAQueryFactory(em);
}
@Override
//νμλͺ
, νλͺ
, λμ΄(ageGoe, ageLoe)
public List<MemberTeamDto> search(MemberSearchCondition condition) {
return queryFactory.select(new QMemberTeamDto(member.id,
member.username,
member.age,
team.id,
team.name))
.from(member)
.leftJoin(member.team, team)
.where(usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageGoe(condition.getAgeGoe()),
ageLoe(condition.getAgeLoe()))
.fetch();
}
private BooleanExpression usernameEq(String username) {
return isEmpty(username) ? null : member.username.eq(username);
}
private BooleanExpression teamNameEq(String teamName) {
return isEmpty(teamName) ? null : team.name.eq(teamName);
}
private BooleanExpression ageGoe(Integer ageGoe) {
return ageGoe == null ? null : member.age.goe(ageGoe);
}
private BooleanExpression ageLoe(Integer ageLoe) {
return ageLoe == null ? null : member.age.loe(ageLoe);
}
}
μ€νλ§ λ°μ΄ν° 리ν¬μ§ν 리μ μ¬μ©μ μ μ μΈν°νμ΄μ€ μμ
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
List<Member> findByUsername(String username);
}