πŸ–₯️ λ°±μ—”λ“œ/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);
}