T아카데미 - JPA 프로그래밍 기초 - [7강] JPA 객체지향쿼리
jpa는 다양한 쿼리 방법을 지원
- JPQL
- JPA Criteria
- QueryDSL
- 네이티브 Mysql
- JDBC API, Mybatis, SpringjdbcTemplate
JPQL
1. 가장 단순
2. EntityManager.find()
3. a.getB().getC()
4. 검색 할 때 도 테이블이 아닌 엔티티 객체를 대상으로 검색함
5. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능함
6. 애플리케이션이 필요한 데이터만 DB에서 불러오려면 검색조건 필요
7. SQL을 추상화한 JPQL 이라는 객체 지향 쿼리 언어를 제공함
8. jpql - 엔티티 대상, sql - 테이블 대상
select
m.id as id,
m.age as age,
m.USERNAME as USERNAME,
m.TEAM_ID as TEAM_ID
from
Member m
where
m.age > 18
9. from 절에 들어가는 것이 객체
10. 엔티티와 속성은 대소문자 구분
11. JPQL 키워드는 대소문자 구분 안함 (SELECT)
12. 별칭은 필수 (m)
프로젝션
- Select 절에 적는 것
페이징 API
1. 두가지 api로 추상화
2. setFirstResult(int startPosition) : 조회 시작 위치 , 0부터 시작
3. setMaxResults(int maxResult) : 조회할 데이터 수
4. 디비 별 방언으로 알아서 치환됨, limit, rownum .. 등
조인
페치조인
1. 엔티티 객체 그래프를 한번에 조회함
2. 별칭을 사용할 수 없다.
- JPQL
select m from Member m join fetch m.team
- SQL
SELECT M.*, T.*
FROM MEMBER T
INNER JOIN TEAM T ON M.TEAM_ID=T.ID
3. 페치조인은 EAGER 로딩과 비슷하다.
JPQL 기본함수
1. CONCAT
2. SUBSTRING
3. TRIM
4. LOWER, UPPER
5. LENGTH
6. LOCATE
7. ABS, SQRT, MOD
8. SIZE, INDEX
9. EXIST, IN
10. BETWEEN, LIKE, IS null
11. CASE 문
12. 사용자 정의 함수 호출 FUNCTION
13. Named 쿼리 - 정적쿼리 (어플리케이션 로딩시점에 오류남 ★★ 에러 잡기 쉬움)
'Back-end > Jpa' 카테고리의 다른 글
순수 JPA - Spring Data JPA와 QueryDSL 이해 (0) | 2021.06.01 |
---|---|
순수 JPA - JPA 내부구조 (0) | 2021.06.01 |
순수 JPA - 양방향 매핑 (0) | 2021.06.01 |
순수 JPA - 연관관계 매핑 (0) | 2021.06.01 |
순수 JPA - 필드와 컬럼 매핑 (0) | 2021.06.01 |