Querydsl - 조회 API 컨트롤러 개발
인프런 실전! Querydsl 강의 내용 정리
- 순수 JPA 리포지토리와 Querydsl
- 동적 쿼리 Builder 적용
- 동적 쿼리 Where 적용
- 조회 API 컨트롤러 개발
조회 API 컨트롤러 개발
편리한 데이터 확인을 위해 샘플 데이터를 추가하자.
샘플 데이터 추가가 테스트 케이스 실행에 영향을 주지 않도록 다음과 같이 프로파일을 설정하자.
src/main/resources/application.yml
1
2
3
spring:
profiles:
active: local
이제 메인(테스트 말고) 에서 가짜 데이터를 스프링 시작 시점에 넣도록 설정해 보자.
src/main/java/study/querydsl/controller/InitMember.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Profile("local")
@Component
@RequiredArgsConstructor
public class InitMember {
private final InitMemberService initMemberService;
@PostConstruct
public void init() {
initMemberService.init();
}
@Component
static class InitMemberService {
@PersistenceContext
EntityManager em;
@Transactional
public void init() {
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
em.persist(teamA);
em.persist(teamB);
for (int i=0; i< 100; i++) {
Team selectedTeam = i % 2 ==0 ? teamA:teamB;
em.persist(new Member("member" + i, i, selectedTeam));
}
}
}
}
@Profile("local")
여기있는 이거 때문에 테스트 때는 스프링을 돌려도 실행되지 않는다.
뭐 100명 멤버 넣는 로직이다.

다음과 같이 The following 1 profile is active: "local"이라고 로그에 나온다.
샘플 데이터를 만들었다면 이제 컨트롤러를 만들어 보자.
src/main/java/study/querydsl/controller/MemberController.java
1
2
3
4
5
6
7
8
9
10
11
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberJpaRepository memberJpaRepository;
@GetMapping("/v1/members")
public List<MemberTeamDto> searchMemberV1(MemberSearchCondition condition) {
return memberJpaRepository.search(condition);
}
}
우리가 이전에 만들어 놨던 MemberTeamDto로 반환을 하고
MemberSearchCondition으로 검색 조건을 완성한다.

결과가 잘 나온다.
검색 조건을 추가해 보자.
?teamName=teamB&ageGoe=31&ageLoe=35&username=member31

검색 조건을 추가해도 아주 잘 나오는 걸 볼 수 있다.
댓글남기기