실전! 스프링 데이터 JPA

Ch06. 나머지 기능들 - 네이티브 쿼리

webmaster 2021. 12. 29. 00:03
728x90
  • 가급적 네이티브 쿼리는 사용하지 않는 게 좋음, 정말 어쩔 수 없을 때 사용
  • 최근에 나온 궁극의 방법 스프링 데이터 Projections 활용
  • 스프링 데이터 JPA 기반 네이티브 쿼리
  • 페이징 지원
  • 반환 타입
    • Object[]
    • Tuple
    • DTO(스프링 데이터 인터페이스 Projections 지원)
  • 제약
    • Sort 파라미터를 통한 정렬이 정상 동작하지 않을 수 있음(믿지 말고 직접 처리)
    • JPQL처럼 애플리케이션 로딩 시점에 문법 확인 불가
    • 동적 쿼리 불가

네이티브 쿼리 동작

네이티브 쿼리 작성
Test
실행된 쿼리

Projections 활용

projection을 활용해서 NativeQuery를 받을 수 있다.
Projection으로 받을 값 정의
Test

동적 네이티브 쿼리

//given
String sql = "select m.username as username from member m";
List<MemberDto> result = em.createNativeQuery(sql)
 .setFirstResult(0)
 .setMaxResults(10)
 .unwrap(NativeQuery.class)
 .addScalar("username")
 .setResultTransformer(Transformers.aliasToBean(MemberDto.class))
 .getResultList();
}
  • 하이버네이트를 직접 활용
  • 스프링 JdbcTemplate, myBatis, jooq 같은 외부 라이브러리 사용
728x90