JPQL이란?
Java Persistence Query Language의 약자로, JPA에서 SQL을 추상화해 제공하는 객체 지향 쿼리 언어를 의미한다. 때문에 JPQL에서 작성된 쿼리문의 대상은 DB 테이블이 아닌 Entity 객체이다. 기본적인 문법은 SQL과 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다. JPA와 마찬가지로 데이터베이스에 의존하지 않는다.
JPQL의 필요성
JPA에서는 개발자가 SQL을 작성하지 않고 JPA에서 제공하는 메서드를 이용해 DB 데이터를 조회해온다.
1
|
Member member = EntityManager.find(Member.class, 100L);
|
cs |
그리고 객체 그래프를 탐색해 연관된 데이터를 다시 조회해온다.
그런데, 특정 검색 조건으로 데이터를 조회해야하는 경우에는 어떻게 해야할까?
예를 들어, Member - Team 구성에서 특정 Team 소속의 Member 목록을 조회한다면 객체 그래프 탐색 방식에서는 아래 코드가 나올 것이다.
- EntityManager.find()로 모든 Member 리스트 조회
- 반복문을 통해 Member 객체에서 Team 취득
- Team 객체로 id 비교해 조건에 해당하는 경우 별도 List에 Member 객체 저장
또 나이가 18살 이상인 Member 모두를 조회하고 싶다면? 혹은 위 상황에서 추가적인 조건이 생긴다면? 페이징 처리를 해야한다면??
이런 상황을 JPQL로 해결!할수있다.
JPQL 사용하기
EntityManager의 createQuery 메서드를 이용해 JPQL을 사용할 수 있다. 이번 포스팅에서는 TypedQuery를 사용하는데, 반환할 타입을 명확하게 지정이 가능할 때 사용이 가능하다. 자세한 내용은 추후 포스팅에서 다룰 예정.
1
2
3
4
|
List<Member> list = entityManager.createQuery("SELECT m FROM Member as m", Member.class)
.setFirstResult(0) // 0번째 데이터 부터
.setMaxResults(100) // 100개 데이터를 가져와
.getResultList();
|
cs |
위 코드는 페이징 처리에 대한 예시 코드이다. 모든 Member를 첫번째 데이터부터 100번째 데이터까지 조회해오는 쿼리이다.
- SELECT m : Member의 데이터를 조회
- FROM Member as m : 엔티티명을 입력한다. JPQL에서는 Alias를 필수로 입력해야한다.
출처 :: 인프런 강의(자바 ORM 표준 JPA 프로그래밍 - 기본편)
'🌱 SPRING > JPA' 카테고리의 다른 글
[JPA] 플러시(flush) (0) | 2020.06.13 |
---|---|
[JPA] 영속성 컨텍스트 (0) | 2020.06.07 |
[JPA] JPA로 CRUD 작성하기 (0) | 2020.06.06 |
[JPA] Dialect(방언) (0) | 2020.06.06 |
[JPA] JPA가 뭘까? (0) | 2020.06.03 |