학습목표: JPQL 기초를 잘 다져 놓자.
select_문 :: =
select_절
from_절
[where_절]
[groupby_절]
[having_절]
[orderby_절]
update_문 :: = update_절 [where_절]
- 한 방에 여러 개를 할 때
delete_문 :: = delete_절 [where_절]
- 한 방에 여러개를 지울 때
--------------------------------------------------------------------------
★
예> select m from Member as m where m.age > 18
SQL과 다른 점은 Member가 엔티티 라는 것!!
엔티티와 속성은 대소문자 구분O(Member. age)
JPQL 키워드는 대소문자 구분X (SELECT, FROM, where)
엔티티 이름 사용, 테이블 이름이 아님(Member)
엔티티 이름은 보통은 Class이름과 동일하게 사용.
//@Entity(name = "Member) << 이렇게 거의 안씀
@Entity <= 이렇게 실무에서는 많이 씀
public class Member
별칭은 필수(m) (as는 생략가능)
---------------------------------------------------------------
집합과 정렬
select
COUNT(m), //회원수
SUM(m.age), //나이 합
AVG(m.age), //평균 나이
MAX(m.age), //최대 나이
MIN(m.age), //최소 나이
from Member m
GROUP BY, HAVING
ORDER BY
---------------------------------------------------------------
TypeQuery, Query
TypeQuery : 반환 타입이 명확할 때 사용
Query: 반환 타입이 명확하지 않을 때 사용
---------------------------------------------------------------
결과 조회 API
query.getResultList(): 결과가 하나 이상일때, 리스트 반환
★ - 결과가 없으면 빈 리스트 반환 (그래서 이거는 nullpoint exception에 대한 걱정을 안해도 됨)
query.getSingleResult(): 결과가 정확히 하나, 단일 객체 반환 << 이거 좀 짜증난데.★
결과가 없으면 : javax.persistence.NoResultException
둘 이상이면: javax.persistence.NonUniqueResultException
---------------------------------------------------------------
파라미터 바인딩 - 이름 기준, 위치 기준
>>> 걍 이름 기반으로 쓰자.
위치 기반은 왠만해서는 쓰지 말자.(장애 발생 up)
---------------------------------------------------------------
★프로젝션
SELECT 절에 조회할 대상을 지정하는 것
프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입)
SELECT m FROM Member m -> 엔티티 프로젝션
SELECT m.team FROM Member m ->엔티티 프로젝션
SELECT m.address FROM Member m -> 임베디드 타입 프로젝션
SELECT m.username, m.age FROM Member m ->스칼라 타입 프로젝션
DISTINCT로 중복제거
프로젝션 - 여러 값 조회
SELECT m.username, m.age FROM Member m
1. Query 타입으로 조회
2. Object[] 타입으로 조회
3. new 명령어로 조회 <<< 제일 깔끔한 방법
- 단순 값을 DTO로 바로 조회
SELECT new jpabook.jpql.UserDTO(m.username,m.age)FROM Member m
- 패키지 명을 포함한 전체 클래스 명 입력
- 순서와 타입이 일치하는 생성자 필요
---------------------------------------------------------------
★ 페이징 API
JPA는 페이징을 다음 두 API로 추상화
setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작)
setMaxResults(int maxResult): 조회할 데이터 수
오라클,MySQL 방언을 비교해주니 JPA의 위대함을 보게됨.
---------------------------------------------------------------
[출처- 인프런 김영한 '자바 ORM 표준 JPA 프로그래밍- 기본편] 강의듣고 정리
'Java Web > JPA' 카테고리의 다른 글
JPQL 문법(4) (0) | 2022.05.03 |
---|---|
JPQL- 페치 조인(fetch join) (0) | 2022.05.02 |
JPQL문법(3) (0) | 2022.05.01 |
JPQL문법(2) (0) | 2022.04.27 |