프로젝션이란
- 쿼리에서 특정 필드를 선택하는 과정
- 원하는 데이터만 추출해서 성능 최적화 및 데이터의 가공을 용이하게 함.
프로젝션 사용법
- 단일 필드 프로젝션
- 단일 컬럼을 선택시, 해당 타입으로 결과를 반환한다.
- 예제
@Test public void selectSingleProjection() { List<String> fetch = qf.selectFrom(item) .select(item.name) .fetch(); System.out.println("fetch = " + fetch); } fetch = [item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19]
- 다중 필드 프로젝션 앤드 튜플~
- 여러 필드 선택시
Tuple
타입을 사용함
@Test public void selectMultipleProjection() { List<Tuple> fetch = qf.selectFrom(item) .select(item.name, item.price) .fetch(); System.out.println("fetch = " + fetch); } fetch = [[item0, 0], [item1, 1000], [item2, 2000], [item3, 3000], [item4, 4000], [item5, 5000], [item6, 6000], [item7, 7000], [item8, 8000], [item9, 9000], [item10, 10000], [item11, 11000], [item12, 12000], [item13, 13000], [item14, 14000], [item15, 15000], [item16, 16000], [item17, 17000], [item18, 18000], [item19, 19000]]
- 여러 필드 선택시
- 빈 생성(Bean Population)
- 쿼리의 결과를 특정 객체로 받으려면 빈 생성 기능을 사용함
- 프로퍼티 접근
@Test public void selectBeanPopulation() { List<ItemDto> fetch = qf.selectFrom(item) .select( bean(ItemDto.class, item.name.as("username"), item.price) ) .fetch(); System.out.println("fetch = " + fetch); }
- 전통적인 DTO 는 사용가능했지만, 자바 17의 Record 는 사용이 힘들었습니다.
- 레코드는 생성자로 접근해야합니다.
- 필드 직접 접근
QItem item = QItem.item; List<ItemDTO> result = query.from(item).list( Projections.fields (ItemDTO.class, item.name.as("username"), item.price));
- 생성자를 사용
@Test void selectConstructor() { List<ItemDto1> fetch = qf.selectFrom(item) .select( constructor(ItemDto1.class, item.name, item.price) ) .fetch(); System.out.println("fetch = " + fetch); }
- distinct
- qf.distinct().selectFrom(…
Uploaded by N2T
'자바 > QueryDsl' 카테고리의 다른 글
[DataJpa] __**@Query 어노테이션을 이용한 쿼리 정의**__ (0) | 2023.11.17 |
---|---|
[DataJpa] 벌크성 수정 쿼리 (0) | 2023.11.17 |
[DataJpa] 데이터 JPA 공통 인터페이스 (0) | 2023.11.15 |
[DataJpa] 쿼리 메서드 기능 (0) | 2023.11.15 |
[DataJpa] Named Query (0) | 2023.11.15 |