QueryDSL은 써볼 기회는 없었지만 JPQL을 직접사용하거나 JPA Criteria로 처리하는 것보다 실무에서 훨씬 유지보수에 유리하다고 들어 용어만 이해하고 넘어가려 한다.
같은 강사님의 강의를 들은 분이 정리한 QueryDSL 사용법과 실무 경험 공유 내용을 시간될 때 참고해야겠다.
https://ict-nroo.tistory.com/117
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
Criteria Query
- Criteria는 JPQL을 생성하는 빌더 클래스로 JPA 2.0부터 Criteria을 지원함
- 장점
- 컴파일 시점에 오류를 발견할 수 있다.
- IDE를 사용하면 코드 자동완성을 지원한다.
- 동적 쿼리를 작성하기 편하다.
- 단점
- 모든 장점을 상쇄할 정도로 복잡하고 장황하다.
- 사용하기 불편하다.
- 코드를 읽기 어렵다.
QueryDSL
- 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크
- 타입에 안전한 방식으로 HQL(Hibernate Query Language)쿼리를 실행하기 위한 목적
- JPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음. 비표준 오픈소스 프레임워크
- 원칙
- Type Safety (타입 안정성)
- 도메인 타입의 프로퍼티를 반영해서 생성한 쿼리 타입을 이용해서 쿼리를 작성
- 완전히 타입에 안전한 방법으로 함수/메서드 호출이루어짐
- Consistency (일관성)
- 기반 기술에 상관없이 쿼리 경로와 오퍼레이션은 모두 동일하며, Query 인터페이스는 공통의 상위 인터페이스를 가짐
- Type Safety (타입 안정성)
참고
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
https://ultrakain.gitbooks.io/jpa/content/chapter10/chapter10.1.html
'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 |