////
Search
Duplicate
🎾

10장. 객체지향 쿼리 언어

JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 기술을 지원한다.

1. 객체지향 쿼리 소개

복잡한 검색 방법을 수행해 1차적으로 어느정도 데이터를 걸러줄 필요가 있을 때, JPQL을 사용해야 하며 JPQL은 다음과 같은 특징을 가진다.
테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리다.
SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.

1. JPQL 소개

JPQL은 엔티티 객체를 조회하는 객체지향 쿼리로, 문법은 SQL과 비슷하며 ANSI 표준 SQL이 제공하는 기능을 유사하게 지원한다.
JPQL은 SQL을 추상화하여 특정 데이터베이스에 의존하지 않는다.
SQL보다 간결하다. 엔티티 직접 조회, 묵시적 조인, 다형성 지원으로 SQL보다 코드가 간결하다.

2. Criteria 쿼리 소개

Criteria는 JPQL을 생성하는 빌더 클래스다. Criteria의 장점은 문자가 아닌 query.select(m).where(…)처럼 프로그래밍 코드로 JPQL을 작성할 수 있다는 점이다.
이 때문에 컴파일 시점에 오류를 발견할 수 있으며 자동완성의 도움을 받기 쉽다. 또한 동적 쿼리를 작성하기 편하다.
장점은 많지만 모든 장점을 상쇄할 정도로 복잡하고 장황하다. 따라서 사용하기 불편하며 가독성도 좋지 않다는 단점이 있다.

3. QueryDSL 소개

Criteria처럼 JPQL 빌더 역할을 수행하며 코드 기반으로 단순하고 사용하기 쉽다. 그리고 작성한 코드도 JPQL과 유사해서 한눈에 들어온다.

4. 네이티브 SQL 소개

JPA는 SQL을 직접 사용할 수 있는 기능을 지원하는데 이를 네이티브 SQL이라 한다.
JPQL을 사용해도 가끔은 특정 데이터베이스에 의존해야 하는 기능을 사용해야할 때, 네이티브 SQL을 사용한다.
네이티브 SQL은 em.createNativeQeury()를 사용한다.

5. JDBC 직접 사용, 마이바티스 같은 SQL 매퍼 프레임워크 사용