Controller
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberJpaRepository memberJpaRepository;
@GetMapping("/v1/members")
public List<MemberTeamDto> searchMemberv1(MemberSearchCondition condition){
return memberJpaRepository.search(condition);
}
}
Repository
@Repository
@RequiredArgsConstructor
public class MemberJpaRepository {
private final EntityManager em;
private final JPAQueryFactory queryFactory; // Bean 등록해줘야 함
...
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 hasText(username)? member.username.eq(username) : null;
}
private BooleanExpression teamNameEq(String teamName) {
return hasText(teamName)? team.name.eq(teamName) : null;
}
private BooleanExpression ageGoe(Integer ageGoe) {
return ageGoe!=null ? member.age.goe(ageGoe) : null;
}
private BooleanExpression ageLoe(Integer ageLoe) {
return ageLoe!=null ? member.age.loe(ageLoe) : null;
}
}
Dto
@Data
public class MemberTeamDto {
private Long memberId;
private String username;
private int age;
private Long teamId;
private String teamName;
@QueryProjection
public MemberTeamDto(Long memberId, String username, int age, Long teamId, String teamName) {
this.memberId = memberId;
this.username = username;
this.age = age;
this.teamId = teamId;
this.teamName = teamName;
}
}
Config
@Configuration
public class BeanConfig {
@Bean
JPAQueryFactory jpaQueryFactory(EntityManager em){
return new JPAQueryFactory(em);
}
}
'Spring Boot > QueryDSL' 카테고리의 다른 글
QueryDSL4RepositorySupport (0) | 2024.08.31 |
---|---|
실무 활용 - 스프링 데이터 JPA와 Querydsl (0) | 2024.08.31 |
Spring Boot QueryDSL 중급 문법 (0) | 2024.08.24 |
Spring Boot QueryDSL 기본 문법 (0) | 2024.08.13 |
Spring Boot QueryDSL 개념 (0) | 2024.08.10 |