일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- MySQL
- 임베디드 타입
- TABLE
- jpa
- 값 타입 컬렉션
- 세션 고정 보호
- 세션 생성 정책
- 지연 로딩
- 양방향 매핑
- 동시 세션 제어
- ddl-auto
- field column mapping
- SessionManagementFilter
- @MappedSuperclasss
- orphanRemovel
- spring jpa
- 상속관계 매핑
- 즉시 로딩
- JPQL
- Database
- 객제지향 쿼리 언어
- 기본 키 매핑
- Spring Security
- 값 타입 비교
- AnonymousAuthenticationFilter
- concurrentsessionfilter
- Remember-me
- form login
- 기본값 타입
- 다대다
- Today
- Total
hoondev
[Spring JPA] 기본 문법과 쿼리 API 본문
JPQL
- JPQL은 객체지향 쿼리 언어다.따라서 테이블을 대상으로 쿼리 하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.
- JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하 지 않는다.
- JPQL은 결국 SQL로 변환된다.
문법
select_문 :: =
select_절
from_절
[where_절]
[groupby_절]
[having_절]
[orderby_절]
update_문 :: =
update_절
[where_절]
delete_문 :: =
delete_절
[where_절]
sql과 매우 유사하다.
- select m from Member as m where m.age > 18
- 엔티티와 속성은 대소문자 구분O (Member, age)
- JPQL 키워드는 대소문자 구분X (SELECT, FROM, where)
- 엔티티 이름 사용, 테이블 이름이 아님(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: 반환 타입이 명확하지 않을 때 사용
TypedQuery query = em.createQuery("SELECT m FROM Member m", Member.class);
Query query = em.createQuery("SELECT m.username, m.age from Member m");
TypedQuery는 결과 목록을 반환하고 Query는 단일 결과를 반환한다. 결과가 없으면 예외가 발생합니다
결과 조회 API
- query.getResultList(): 결과가 하나 이상일 때, 리스트 반환
- 결과가 없으면 빈 리스트 반환
- query.getSingleResult(): 결과가 정확히 하나, 단일 객체 반환
- 결과가 없으면: javax.persistence.NoResultException
- 둘 이상이면: javax.persistence.NonUniqueResultException
파라미터 바인딩 - 이름 기준, 위치 기준
SELECT m FROM Member m where m.username=:username
query.setParameter("username", usernameParam);
SELECT m FROM Member m where m.username=?1
query.setParameter(1, usernameParam);
Reference
'Spring JPA' 카테고리의 다른 글
[Spring JPA] JPQL 페이징 (0) | 2023.02.16 |
---|---|
[Spring JPA] JPQL 프로젝션 (0) | 2023.02.14 |
[Spring JPA] 객체지향 쿼리 언어 (0) | 2023.02.10 |
[Spring JPA] 값 타입 컬렉션 (0) | 2023.02.09 |
[Spring JPA] 값 타입의 비교 (0) | 2023.02.08 |