반응형
개발할 때 테이블의 모든 컬럼을 조회할 경우가 있습니다. 그때 Querydsl-JPA를 사용할 때 어떻게 사용할 수 있는지 작성해보겠습니다.
모든 소스는 github에 올려두었습니다.
먼저 하고 싶은 쿼리가 어떤 것인지 작성해보겠습니다.
select
s.*
, etc_option
from staff s
join store st on s.store_id = st.id
where s.name = 'staffV'
limit 1
이것과 동일한 Querydsl을 작성해보겠습니다.
먼저 Vo를 생성합니다.
@Getter @Setter @ToString
public class StaffEtcVo {
private Staff staff;
private String address;
}
필드에 Staff Entity를 선언합니다
다음으로 Querydsl-JPA를 작성합니다.
@Override
public StaffEtcVo findStaffAndEtcOption(String name) {
return jpaQueryFactory
.select(Projections.fields(StaffEtcVo.class,
staff,
store.address
))
.from(staff)
.join(store)
.on(store.id.eq(staff.storeId))
.where(staff.name.eq(name))
.fetchFirst();
}
그럼 아래와 같은 쿼리를 생성할 것입니다.
select
staff0_.id as col_0_0_,
store1_.address as col_1_0_,
staff0_.id as id1_0_,
staff0_.age as age2_0_,
staff0_.last_name as last_nam3_0_,
staff0_.name as name4_0_,
staff0_.store_id as store_id5_0_
from
staff staff0_
inner join
store store1_
on (
store1_.id=staff0_.store_id
)
where
staff0_.name='staffN' limit 1
확인해보시면 모든 Staff의 필드를 조회하는 것을 확인할 수 있습니다.
Tip
만약 Vo객체에서 staffEtcVo.getStaff().getId() 가 불필요하고 바로 staffEtcVo.getId()를 하고 싶다면 @JsonUnwrapped 붙혀줍니다. Unwrapped를 시켜줍니다!
@Getter @Setter @ToString
public class StaffEtcVo {
@JsonUnwrapped
private Staff staff;
private String address;
}
단! API의 Response값으로 적용되기 때문에 바로 조회 후는 불가능합니다!
반응형
'Develop > spring-data' 카테고리의 다른 글
[Querydsl] 성능개선 - 2편 ( N + 1 ) (0) | 2021.02.01 |
---|---|
[Querydsl] 성능 개선 1편 (0) | 2021.01.29 |
[Querydsl] Querydsl을 적용하며.. class 파일명 주의 (1) | 2020.12.18 |
[JPA] Querydsl에 pageable을 적용하며... 2가지 방법을 소개하겠습니다. (2) | 2020.12.10 |
[Querydsl] Querydsl 사용방법 3가지 (0) | 2020.12.07 |