JPQL

Growing_HJ·2024년 7월 31일

JPA

목록 보기
12/15

📍 JPQL (Java Persistence Query Language) 📍

JPQL 의 특징
1. 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리.
2. SQL 을 추상화해서 특정 데이터베이스 SQL 에 의존하지 않는다.
3. SQL 보다 간결하다.
엔터티 직접 조회, 묵시적 조인, 다형성 지원으로 SQL 보다 코드가 간결하다.

A. 결과 조회

  • 실제 쿼리를 실행해서 데이터베이스를 조회한다.
  1. query.getResultList() : 결과를 예제로 반환한다.
    만약 결과가 없으면 빈 컬렉션을 반환한다.
  2. query.getSingleResult() : 결과가 정확히 하나일 때 사용한다.

B. 파라미터 바인딩
1. 이름 기준 파라미터 : 파라미터를 이름으로 구분하는 방법 [ : ]사용

String usernameParm = "User1";
TypedQuery<Member> query = 
	em.createQuery("SELECT m FROM Member m where m.username = :username",
    										Member.class);
query.setParameter ("username", usernameParam)l
List<Member> resultList = query.getResultList();

2. 위치 기준 파라미터 : 파라미터를 위치로 구분하는 방법 [ ? ] 사용

List<Member> members = 
		em.createQuery("SELECT m FROM Member where m.username 
        	= ?1", Member.class).setParameter(1, usernameParam)
            .getResultList();

3. 페이징 API
1. setFirstResult (int startPosition) : 조회 시작 위치
2. setMaxResults (int maxResult) : 조회할 데이터의 수

TypedQuery<Member> query = em.createQuery ("select m from Member m 
ORDER BY m.username DESC", Member.class);
query.setFristResult(10); // 10 번부터 ~
query.setMaxResult(20); // 20 개의 데이터를 조회 - 11 ~ 30 번 까지 조회됨.
query.getResultList();

4. 집합과 정렬

  • 집합은 집합함수와 함께 통계 정보를 구할 때 사용.
    COUNT : 결과 수를 구한다 (Long)
    MAX, MIN : 최대, 최소 값을 구한다. 문자, 숫자, 날짜 등에 사용한다
    AVG : 평균값을 구한다 . (Double)
    SUM : 합을 구한다. 숫자 타입만 사용할 수 있다.
집합 함수 사용시 고려사항
	1. Null 값은 무시하므로 통계에 잡히지 않는다 (DISTINCT 가 정의되어 있어도 무시한다. )
    2. 만약 값이 없는데 SUM, AVG, MAX, MIN 함수를 사용하면 NULL 값이 된다. 
    													단 COUNT 는 0이 된다.
    3. DISTINCT 를 집합 함수 안에 사용해서 중복된 값을 제거하고 나서 집합을 구할 수 있다. 
    4. DISTINCT 를 COUNT 에서 사용할 때 임베디드 타입은 지원하지 않는다. 
  • 정렬
    오름차순 : ASC
    내림 차순 : DESC

0개의 댓글