Time does not change us. It just unfolds us.

Web/JPA

[JPA]객체지향 쿼리

소젬 2021. 11. 25. 09:16

QueryDSL은 써볼 기회는 없었지만 JPQL을 직접사용하거나 JPA Criteria로 처리하는 것보다 실무에서 훨씬 유지보수에 유리하다고 들어 용어만 이해하고 넘어가려 한다.

같은 강사님의 강의를 들은 분이 정리한 QueryDSL 사용법과 실무 경험 공유 내용을 시간될 때 참고해야겠다.

https://ict-nroo.tistory.com/117

 

[JPA] Spring Data JPA와 QueryDSL 이해, 실무 경험 공유

Spring Data JPA와 QueryDSL JPA 기반 프로젝트 Spring Data JPA QueryDSL Spring Data JPA 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결 개발자는 인터페이스만 작성한다 스프링 데이터 JPA가 구현 객체..

ict-nroo.tistory.com


 

ORM

  • 객체가 테이블이 되도록 매핑 시켜주는 프레임워크
  • 관계와 RDB 간의 차이를 중간에서 해결해 주는 것

JPA(Java Persistence API)

  • 자바 진영의 ORM 기술 표준
  • ORM을 사용하기 위한 인터페이스를 모아둔 것
  • SQL을 직접 작성할 필요 없음

Hibernate Framwork

  • JPA를 사용하기 위해서 JPA를 구현한 ORM 프레임워크

 

객체지향 쿼리

  • JPQL (가장 중요)
  • Criteria
  • QueryDSL
  • 네이티브 SQL

JPA가 공식 지원하는 기능

JPQL Java Persistence Query Language
Criteria 쿼리 JPQL을 편하게 작성하도록 도와주는 API, 빌더 클래스 모음
네이티브 SQL JPA에서 JPQL 대신 직접 SQL을 사용

JPQL

https://x-ojm.tistory.com/58

 

[JPA]JPQL(Java Persistence Query Language)

JPA를 공부하면서 JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어를 제공한다는 것을 알게 되었다. JPA은 table 대상인 SQL과 달리 Entity 객체를 중심으로 개발하므로 Entity 대상으로 Query를 작성​

x-ojm.tistory.com

Criteria Query

  • Criteria는 JPQL을 생성하는 빌더 클래스로 JPA 2.0부터 Criteria을 지원함
  • 장점
    • 컴파일 시점에 오류를 발견할 수 있다.
    • IDE를 사용하면 코드 자동완성을 지원한다.
    • 동적 쿼리를 작성하기 편하다.
  • 단점
    • 모든 장점을 상쇄할 정도로 복잡하고 장황하다.
    • 사용하기 불편하다.
    • 코드를 읽기 어렵다.

QueryDSL

  • 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크
  • 타입에 안전한 방식으로 HQL(Hibernate Query Language)쿼리를 실행하기 위한 목적
  • JPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음. 비표준 오픈소스 프레임워크
  • 원칙
    • Type Safety (타입 안정성)
      • 도메인 타입의 프로퍼티를 반영해서 생성한 쿼리 타입을 이용해서 쿼리를 작성
      • 완전히 타입에 안전한 방법으로 함수/메서드 호출이루어짐
    • Consistency (일관성)
      • 기반 기술에 상관없이 쿼리 경로와 오퍼레이션은 모두 동일하며, Query 인터페이스는 공통의 상위 인터페이스를 가짐

 

참고

https://joosjuliet.github.io/orm_jpa_hibernate/

https://hckcksrl.medium.com/querydsl-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-1259825181fb

 

QueryDSL 시작하기

QueryDSL

hckcksrl.medium.com

https://ultrakain.gitbooks.io/jpa/content/chapter10/chapter10.1.html

 

10.1 객체지향 쿼리 소개 · jpa

 

ultrakain.gitbooks.io

 

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

[JPA]Transcation, 영속성Context, EntityManager  (0) 2021.11.23
[JPA]JUnit단위 Test 관련 정리  (0) 2021.11.23
[JPA]JPQL(Java Persistence Query Language)  (0) 2021.11.22
[JPA]Annotation 정리  (0) 2021.11.18