본문 바로가기
Spring/JPA

JPA ) 객체지향 쿼리 언어 소개

by 윤시프16 2023. 4. 23.

JPA는 다양한 쿼리 방법을 지원한다.

 

JPA 쿼리 언어 종류


 

1. JPQL

2. JPA Criteria

3. QueryDSL

4. 네이티브 SQL

5. JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용

 

 

JPQL


 

1. JPQL 이란?

JPA를 사용하면 엔티티 객체를 중심으로 개발할 수 있다. JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공한다.

-  가장 단순한 조회 방법이다.  ex ) EntityManager.find()

- SQL과 문법 유사하다. SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원한다.

- JPQL은 엔티티 객체를 대상으로 쿼리 생성할수 있다. 실제 SQL은 데이터베이스 테이블을 대상으로 쿼리 생성한다.

- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리이다.

- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.

 

JPQL을 한마디로 정의하면 객체 지향 SQL이다.

 

 

2. JPQL 사용 방법

JPQL

쿼리안에 있는 Member는 테이블 명이 아닌 엔티티 명이다.

JPQL로 생성된 쿼리

 

 3. JPQL의 단점

JPQL은 String이다. 동적 쿼리를 만들기 쉽지 않다. 

동적쿼리를 만들려면 수많은 if문과 띄어쓰기 또한 조심해야한다.

 

 

JPA Criteria


 

1. JPA Criteria이란?

- 문자가 아닌 자바코드로 JPQL을 작성할 수 있다.
- JPQL 빌더 역할을 한다.
- JPA 공식 기능이다.

 

 

2.  JPA Criteria의 사용 방법

 

3. JPA Criteria의 단점

실제로 사용하다보면 너무 복잡하고 실용성이 없다. 

Criteria 대신에 QueryDSL 사용 권장

 

 

 

QueryDSL


1. QueryDSL 이란?

- 문자가 아닌 자바코드로 JPQL을 작성할 수 있다.
- JPQL 빌더 역할이다.
- 컴파일 시점에 문법 오류를 찾을 수 있음 동적쿼리 작성 편리함
- 단순하고 쉽다.
- 실무 사용 권장

 

2. QueryDSL의 사용 방법

 

 

 

네이티브 SQL


 1. 네이티브 SQL 이란?

- JPA가 제공하는 SQL을 직접 사용하는 기능
- JPQL로 해결할 수 없는 특정 데이터베이스에 의존적인 기능
예) 오라클 CONNECT BY, 특정 DB만 사용하는 SQL 힌트

 

 2. 네이티브 SQL의 사용 방법

 

 

 

JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용


- JPA를 사용하면서 JDBC 커넥션을 직접 사용하거나, 스프링 JdbcTemplate, 마이바티스등을 함께 사용 가능

- 단 영속성 컨텍스트를 적절한 시점에 강제로 플러시 필요하다.  

JPA는 커밋하기전에는 저장이 안되지만 강제로 플러시하거나 쿼리를 실행하기전에 플러시를 자동으로 해준다.

 하지만 JPA가 아닌 쿼리는 그렇지 않기 때문에 JPA를 우회해서 SQL을 실행하기 직전에 영속성 컨텍스트 수동 플러시해줘야한다.

 

 

 

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

@Converter  (0) 2023.06.07
JPA ) JPQL 문법 1  (0) 2023.04.23
JPA ) 1:1 연관 관계  (0) 2023.04.18
JPA ) 연관관계  (0) 2023.02.20
JPA ) 플러시(Flush) 란?  (0) 2022.12.13