무작정 Query Dsl 따라하기 (with. Test mode)
1. Repository 생성하기
public interface TestBookRepository extends JpaRepository<Book, Long>{
}
2. CustomRepository 생성하기 (QueryDsl 메소드 추가 용도)
public interface TestBookRepositoryCustom {
// QueryDsl 용 메소드를 추가할 것임
}
3. CustomRepository 구현체 생성
public interface TestBookRepositoryCustom {
// QueryDsl 용 메소드를 추가할 것임
}
4. CutomRepository 생성에 따른 BookRepository에 상속시켜줌
public interface TestBookRepository extends JpaRepository<Book, Long>, TestBookRepositoryCustom{
}
5. Bean 생성
@Configuration
public class AppConfig {
//JPAQueryFactory가 있어야지 QueryDsl을 사용 가능
@Bean
public JPAQueryFactory jpaQueryFactory (EntityManager entityManager) {
return new JPAQueryFactory(entityManager);
}
}
5. Test 작성 (책 정보 조회)
@Test
@DisplayName("1번 책 Qsl로 가져오기")
void t2() {
Book book1 = testBookRepository.getQslBook(1L);
assertThat(book1.getId()).isEqualTo(1L);
assertThat(book1.getCategory()).isEqualTo("...");
assertThat(book1.getBabyCategory()).isEqualTo("...");
assertThat(book1.getTitle()).isEqualTo("...");
assertThat(book1.getPrice()).isEqualTo(...);
assertThat(book1.getStar()).isEqualTo(...);
assertThat(book1.getPublish()).isEqualTo(...);
assertThat(book1.getImage()).isEqualTo("...");
assertThat(book1.getAuthor()).isEqualTo("...");
assertThat(book1.getMonth()).isEqualTo(...);
assertThat(book1.getYear()).isEqualTo(...);
}
public interface TestBookRepositoryCustom {
// QueryDsl 용 메소드를 추가할 것임
// 예제
Book getQslBook(Long id);
}
@RequiredArgsConstructor
public class TestBookRepositoryImpl implements TestBookRepositoryCustom{
// TestBookRepositoryCustom 구현체
private final JPAQueryFactory jpaQueryFactory;
@Override
public Book getQslBook(Long id) {
/*
SELECT
FROM book
WHERE id = 1
*/
return jpaQueryFactory
.select(QBook.book)
.from(QBook.book)
.where(QBook.book.id.eq(id))
.fetch();
}
}
6. Test를 실행하면 아마도 실패할 것이다. 이유는 TestBookRepositoryImpl 에서 list를 반환하고 있기 때문!
따라서, 오류가 나는 부분을 찾아들어가서 변경을 해주면
@RequiredArgsConstructor
public class TestBookRepositoryImpl implements TestBookRepositoryCustom{
// TestBookRepositoryCustom 구현체
private final JPAQueryFactory jpaQueryFactory;
@Override
public Book getQslBook(Long id) {
/*
SELECT
FROM book
WHERE id = 1
*/
return jpaQueryFactory
.select(QBook.book)
.from(QBook.book)
.where(QBook.book.id.eq(id))
.fetchone();
}
}
위와 같은 형태가 되고, Test를 진행 했을 때 정상 작동이 되는 것을 확인 할 수 있다.
7. build.gradle 에 log를 Console에 깔끔하게 찍어주는 p6spy를 주입 (해도되고 안해도 되고?!)
implementation("com.github.gavlyukovskiy:p6psy-spring-boot-starter:1.8.0")
728x90
'ssung_항해일지 > 항해99_실전 프로젝트' 카테고리의 다른 글
실전 프로젝트 - 13일차 (0) | 2023.03.22 |
---|---|
실전 프로젝트 - 12일차 (0) | 2023.03.21 |
실전 프로젝트 - 9일차 (0) | 2023.03.19 |
실전 프로젝트 - 8일차 (0) | 2023.03.17 |
실전 프로젝트 - 7일차 (0) | 2023.03.16 |