본문 바로가기
JPA/JPQL

JPQL 객체지향 쿼리 언어 소개

by 킹차니 2021. 7. 19.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

 

JPA는 다양한 쿼리 방법을 지원합니다.

 

 JPQL

 JPA Criteria

 QueryDSL

 네이티브 SQL

JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용

 

 

JPQL

가장 단순한 조회 방법

EntityManager.find()
객체 그래프 탐색(a.getB().getC())

나이가 18살 이상인 회원을 모두 검색하고 싶다면?

 JPA를 사용하면 엔티티 객체를 중심으로 개발

문제는 검색 쿼리

 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색

 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능

플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요

 

 

JPQL코드

위와 같은 코드를 수행하면 아래와 같은 쿼리가 나갑니다.

 

• 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리

• SQL을 추상화해서 특정 데이터베이스 SQL에 의존X

JPQL을 한마디로 정의하면 객체 지향 SQL

 

 


 

 

 

JPA Criteria(비추하는 방법)

 

 문자가 아닌 자바코드로 JPQL을 작성할 수 있음

JPQL 빌더 역할

 JPA 공식 기능
 단점: 너무 복잡하고 실용성이 없다.

 Criteria 대신에 QueryDSL 사용 권장

 

 

 


 

 

QueryDSL

 

• 문자가 아닌 자바코드로 JPQL을 작성할 수 있음

• JPQL 빌더 역할

• 컴파일 시점에 문법 오류를 찾을 수 있음 동적쿼리 작성 편리함
• 단순하고 쉬움
• 실무 사용 권장

 

 


 

 

 

네이티브 SQL

 

 JPA가 제공하는 SQL을 직접 사용하는 기능
 JPQL로 해결할 수 없는 특정 데이터베이스에 의존적인 기능

 ) 오라클 CONNECT BY, 특정 DB만 사용하는 SQL 힌트

 

 

JDBC 직접 사용, SpringJdbcTemplate

 

 JPA를 사용하면서 JDBC 커넥션을 직접 사용하거나, 스프링 JdbcTemplate, 마이바티스등을 함께 사용 가능

 단 영속성 컨텍스트를 적절한 시점에 강제로 플러시 필요

) JPA를 우회해서 SQL을 실행하기 직전에 영속성 컨텍스트 수동 플러시

 

 

 

 

'JPA > JPQL' 카테고리의 다른 글

JPQL 타입표현과 기타식  (0) 2021.07.21
JPQL 서브쿼리  (0) 2021.07.21
JPQL 페이징, 조인  (0) 2021.07.20
JPQL 프로젝션  (0) 2021.07.20
JPQL 기본문법과 기능  (0) 2021.07.19