ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 11일차

ssungcohol 2023. 3. 20. 22:44

무작정 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