🟢 객체 지향 쿼리 소개
EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다.
이렇게 조회한 엔티티에 객체 그래프 탐색을 사용하면 연관된 엔티티를 찾을 수 있다.
- 식별자로 조회
- EntityManager
- 객체 그래프 탐색
- a.getA()
이 기능만으로 애플리케이션을 개발하기 어렵다.
예를들어 나이가 30살 이상인 회원을 모두 검색하고 싶다면 좀 더 현실적이고 복잡한 검색 방법이 필요하다,
그렇다고 모든 회원 엔티티를 메모리에 올려두고 애플리케이션에서 30살 이상인 회원을 검색하는 것은 현실성이 없다.
결국 DB 에 있으므로 SQL 로 필요한 내용을 최대한 걸러서 조회해야 한다.
하지만 ORM 을 사용하면 DB 테이블이 아닌 엔티티 객체를 대상으로 개발하므로
검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하다.
- 테이블이 아닌 객체를 대상으로검색하는 객체지향 쿼리다.
- SQL 을 추상화해서 특정 DB SQL 에 의존하지 않는다.
SQL 이 DB 테이블을 대상으로 하는 데이터 중심의 쿼리라면 JPQL 은 엔티티 객체를 대상으로 하는 객체지향 쿼리이다.
JPQL 을 사용하면 JPA 는 이 JPQL을 분석한 다음 적절한 SQL을 만들어서 DB 를 조회한다.
그리고 조회한 결과로 엔티티 객체를 생성해서 반환한다.
JPQL 을 한마디로 정의하면 객체지향 SQL 이다.
처음 보면 SQL 로 오해할 정도로 문법이 비슷하다.
따라서 SQL 에 익숙한 개발자는 몇 가지 차이점만 이해하면 쉽게 적응 가능하다.
JPA 는 JPQL 뿐만 아니라 다양한 검색 방법을 제공한다.
🟢 JPA 가 공식 지원하는 기능
- JPQL
- Java Persistence Query Languge
- Crieria 쿼리
- JPQL 을 편하게 작성하도록 도와주는 API
- JPQL 을 편하게 작성하도록 도와주는 빌더 클래스 모음.
- 네이티브 SQL
- JPA 에서 JPQL 대신 직접 SQL 을 사용할 수 있다.
🟢 JPA 가 공식 지원하지 않지만 참고할 기능
- QueryDSL
- Criteria 쿼리처럼 JPQL 을 편하게 작성하도록 도와주는 빌더 클래스 모음, 비표준 오픈 소스 프레임 워크이다.
- JDBC 직접 사용, Mybatis 같은 SQL 매퍼 프레임 워크 사용
- 필요하면 JDBC 를 직접 사용할 수 있다.
가장 중요한 건 JPQL 이다.
Crieria 이나 QueryDSL 는 JPQL 을 편하게 작성할 수 있도록 도와주는 빌더 클래스 일 뿐이다.
따라서 JPQL 을 이해해야 나머지도 이해할 수 있다.
'개발중 > Java Persistence API (JPA)' 카테고리의 다른 글
🟡 QueryDSL이란 ? (0) | 2021.07.01 |
---|---|
🟡 JPQL 이란 ? (0) | 2021.07.01 |
Java 객체/ 기본값 타입의 특징 (0) | 2021.06.30 |
JPA - 값 타입 컬렉션 (0) | 2021.06.30 |
JPA - 즉시 로딩과 지연 로딩 (0) | 2021.06.28 |