본문 바로가기

개발중/Java Persistence API (JPA)

객체 지향 쿼리 소개

728x90
반응형

🟢 객체 지향 쿼리 소개

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 을 이해해야 나머지도 이해할 수 있다.

 


728x90
반응형

'개발중 > 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