오봉이와 함께하는 개발 블로그
Querydsl - 조회 API 컨트롤러 개발 본문
728x90
조회 API 컨트롤러 개발
편리한 데이터 확인을 위해 샘플 데이터를 추가하자.
샘플 데이터 추가가 테스트 케이스 실행에 영향을 주지 않도록 다음과 같이 프로파일을 설정하자
프로파일 설정src/main/resources/application.properties
spring.profiles.active=local
테스트는 기존 application.properties를 복사해서 다음 경로로 복사하고, 프로파일을 test로 수정src/test/resources/application.properties
spring.profiles.active=test
이렇게 분리하면 main 소스코드와 테스트 소스 코드 실행시 프로파일을 분리할 수 있다.
샘플 데이터 추가
@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")
설정한 프로파일을 통해 local에서만 실행되도록 설정했다.
@PostConstruct
에 메소드 init()
을 사용하지 않고 그대로 사용하는 방법도 있지 않을까?
하지만, 스프링 라이프 사이클상 @PostConstruct
에 @Transactional
을 같이 사용할 수 없기 때문에 따로 메소드를 만들어서 실행했다.
그대로 사용(불가능한 방법)
@PostConstruct
@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));
}
}
조회 컨트롤러
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberJpaRepository memberJpaRepository;
@GetMapping("/v1/members")
public List<MemberTeamDto> searchMemberV1(MemberSearchCondition condition) {
return memberJpaRepository.search(condition);
}
}
결과
[
{
"memberId": 34,
"username": "member31",
"age": 31,
"teamId": 2,
"teamName": "teamB"
},
{
"memberId": 36,
"username": "member33",
"age": 33,
"teamId": 2,
"teamName": "teamB"
},
{
"memberId": 38,
"username": "member35",
"age": 35,
"teamId": 2,
"teamName": "teamB"
}
]
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
'BE > JPA' 카테고리의 다른 글
Querydsl - 스프링 데이터 JPA 사용자 정의 리포지토리 (0) | 2022.09.20 |
---|---|
Querydsl - 스프링 데이터 JPA 리포지토리로 변경 (1) | 2022.09.20 |
Querydsl - 동적 쿼리와 성능 최적화 조회 Where절 파라미터 사용 (0) | 2022.09.20 |
Querydsl - 동적 쿼리와 성능 최적화 조회 Builder 사용 (0) | 2022.09.20 |
Querydsl - 순수 JPA와 Querydsl (0) | 2022.09.20 |
Comments