Spring/JPA기본

객체지향 쿼리 언어 소개(JPQL, QueryDSL, NativeQuery)

Per ardua ad astra ! 2021. 7. 31. 11:54

JPA는 JPQL을 포함한 다양한 쿼리 방법을 지원한다. 

 

필요성


JPA를 사용하면 테이블이 아닌 엔티티 객체를 중심으로 개발한다. 
=> 문제는 검색쿼리

검색할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색하고 싶은데, 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능. (find로 일일히 데이터 하나하나를 찾을 수 없기 때문)

 결국 에플리케이션이 필요한 데이터들만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. => 쿼리 언어를 통한 조회

 

JPQL

- SQL을 추상화한다. 그래서 특정 DB SQL에 의존하지 않는다. 
- 안심표준 SQL을 지원
- JPQL은 테이블이 아닌 엔티티 객체를 대상으로 하는 객체 지향 쿼리
- SQL은 DB 테이블을 대상으로 쿼리 

=> 하지만 String안에 JPQL을 구현해야해서 동적쿼리 생성이 어렵고 각종 버그를 잡아내기 힘들다는 단점이 있다.

 


QueryDSL

- 세팅이 어렵긴하지만 세팅후 장점이 많음
- JPQL 빌더 역할
- 컴파일 시점에 문법 오류를 찾을 수 있음
- 동적 쿼리 편하게 작성 가능
- 단순하고 보기에도 쉬움(유지보수가 쉬워진다)
- 실무 사용 권장


NativeQuery

- JPA가 사용하는 SQL을 직접사용가능 
- JPQL이 해결할 수 없는 특정 데이터 베이스에 의존적인 기능 ex) 오라클 CONNECT BY 특정 DB만 사용하는 SQL힌트

ex)

createNativeQuery 함수 사용
em.createNativeQuery("select MEMBER_ID, city, street, zipcode, USERNAME from MEMBER", MEMBER.class).getResultList();
 

이 게시물은 '자바 ORM 표준 JPA 프로그래밍' 강의를 수강하고 정리한 내용임을 밝힙니다. 
출처: https://www.inflearn.com/course/ORM-JPA-Basic#

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com