-
[SpringBoot] Repository에서 nativeQuery 사용시 / private final로 변수 선언하는 이유 / Page vs. SliceBack-end/TIL 2022. 3. 16. 09:39
# Repository에서 nativeQuery 사용시
//Bad @Query(...) Page<Object[]> findAll(Pageable pageable); //Good @Query(...) Page<DtoVo> findAll(Pageable pageable); public interface DtoVo { Long getId(); }
- 첫 번째 방식: Object 배열의 인덱스로 접근해야 하므로, 오류 발생 가능성이 크다.
- 두 번째 방식
- interface에 필요한 필드를 불러오는 getter 메서드만 선언해둔다.
- Spring Data JPA에서 @Query()에서 설정한 변수 값으로 DtoVo에 바로 매핑해준다. (nativeQuery외에 일반 JPQL에서도 동일하게 작동함)
//예시 코드 @Query("select pm.id as id, " + "pm.menuKorName as menuKorName, " + "pm.menuEngName as menuEngName, " + "from PharmacyMenu pm " + "where (pm.menuKorName like %:menuName% or pm.menuEngName like %:menuName%)") Page<PharmMenuListResDtoVo> findByMenuName(@Param("menuName") String menuName, Pageable pageable);
# private final로 변수 선언하는 이유
- Spring에서 DI(의존성 주입)를 위해 생성자 주입 방식을 선호한다.
- private final로 선언하여 에러 체크(ex. 객체 생성이 안된 경우 등)를 잘 하기 위함이다.
# Page vs. Slice
- Page: 1, 2, 3 .. 이렇게 Pagination 구현할 때 사용
- Slice: 더보기로 Pagination 구현할 때 사용
'Back-end > TIL' 카테고리의 다른 글
[SpringBoot] Converter를 사용한 사용자 정보 암호화 / Cascade 옵션 설정 / 모르는 개념 공부 방법 (0) 2022.03.30 [SpringBoot] 테스트 코드 작성에 대하여 / 멀티 모듈의 장점 / API 설계 및 배포 / 코드 작성 관련(다형성, lombok, import문) (0) 2022.03.24 [SpringBoot] @TestInstance / @WithUser & @WithAccount / 중복된 코드에 대한 메서드 분리 (0) 2022.03.21 [SpringBoot] ManyToOne으로 설정된 엔티티 조회 (0) 2022.03.17 [SpringBoot] JPA를 통해 엔티티 반환시 DtoVo 사용하기 (0) 2022.03.16