JPQL 의 특징
1. 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리.
2. SQL 을 추상화해서 특정 데이터베이스 SQL 에 의존하지 않는다.
3. SQL 보다 간결하다.
엔터티 직접 조회, 묵시적 조인, 다형성 지원으로 SQL 보다 코드가 간결하다.A. 결과 조회
- 실제 쿼리를 실행해서 데이터베이스를 조회한다.
query.getResultList(): 결과를 예제로 반환한다.
만약 결과가 없으면 빈 컬렉션을 반환한다.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