Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SpringBoot
- Crawling
- openapi3
- tasklet
- UsernamePasswordAuthenticationFilter
- vuejs
- JavaScript
- MSA
- T-OTP
- cheerio
- AuthenticatoinProvide
- OpenStack
- preventdefault
- gradle
- MFA
- Flyway
- 리액트
- axios
- Spring Batch
- Spring Security
- SWAGGER
- Pender
- cloud native
- SpringRESTDocs
- vue
- Spring REST Docs
- Filter
- Reduxpender
- stopPropogation
- REACT
Archives
- Today
- Total
Miracle Morning, LHWN
5. 객체지향 쿼리언어_2 본문
# INNER JOIN
String query = "SELECT" +
"NEW com.jpapeeknapply.service.UserAndGroupDto(user.name, group.name)" +
"FROM User user INNER JOIN user.userGroup group";
List<UserAndGroupDto> userAndGroupDtoList = em.createQuery(query, UserAndGroupDto.class).getResultList();
String query = "SELECT user, group" +
"FROM User user INNER JOIN user.userGroup group";
# OUTER JOIN
String query = "SELECT" +
"NEW com.jpapeeknapply.service.UserAndGroupDto(user.name, group.name)" +
"FROM User user LEFT [OUTER] JOIN user.userGroup group";
※ [] 는 생략가능
# FETCH JOIN
JPQL 의 성능 최적화를 위한 기능으로, 연관된 엔티티나 컬렉션을 한번에 조회하는 기능이다.
- 엔티티 페치 조인 : 엔티티를 조회하며 연관된 엔티티를 함께 조회해온다.
SELECT user from User user join fetch user.userGroup
- 컬렉션 페치 조인 : 엔티티를 조회하며 연관된 엔티티를 함께 조회해온다.
SELECT group from UserGroup group join fetch group.userList
- 페치 조인을 사용하면 준영속 상태에서도 객체 그래프를 탐색할 수 있다.
- 페치 조인 대상에는 별칭을 줄 수 없다. → SELECT, WHERE, 서브 쿼리에서는 페치 조인 대상을 사용할 수 없다.
- 둘 이상의 컬렉션을 패치할 수 없다.
- 페치 조인 사용 시 페이징을 사용할 수 없다.
다만, JPQL 에서도 서브쿼리, 서브쿼리함수, 조건식, 연산자 스칼라식, 함수 등을 지원하기 때문에 필요할 때마다 검색해서 사용하면 된다.
네임드 쿼리 (=정적 쿼리) 도 사용 가능하다.
- COUNT, MAX, MIN, AVG, SUM
- GROUP BY, HAVING
- ORDER BY [ASC(default), DESC]
- JOIN
- INNER
- OUTER
- ON
- FETCH
- SUB QUERY
- Named 쿼리 (= 정적 쿼리)
# 네이티브 SQL
JPQL 에서 지원하는 SQL 을 직접 사용하는 기능
String sql = "SELECT ID, NAME FROM USER WHERE NAME = `kim`"
List<User> userList = em.createNativeQuery(sql, User.class).getResultList();
JDBC 를 직접 사용하거나 MyBatis 같은 매퍼 프레임워크도 사용 가능하다.
다만, 영속성 컨텍스트가 인지하지 못하는 이슈가 발생할 수 있다.
- 특정 DB 에서만 사용하는 함수
- 특정 DB 에서만 지원하는 SQL 쿼리 힌트
- 인라인뷰 (From 절에서 사용하는 서브 쿼리), UNION, INTERSECT
- 결과 매핑 어노테이션
- @SqlResultSetMapping
- @EntityResult
- @FieldResult
- @ColumnResult
- Named 네이티브 SQL
'IT 기술 > [JAVA] Spring Boot' 카테고리의 다른 글
7. 트랜잭션 (0) | 2021.05.07 |
---|---|
6. Spring Data JPA (0) | 2021.05.06 |
4. 객체지향 쿼리언어_1 (0) | 2021.05.06 |
3. 프록시와 연관관계 (0) | 2021.05.05 |
2. 연관관계매핑 (0) | 2021.05.05 |
Comments