์์ JPA์์ DTO ์กฐํ
List<MemberDto> result = em.createQuery(
"select new study.querydsl.dto.MemberDto(m.username, m.age) " +
"from Member m", MemberDto.class)
.getResultList();
- new ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผํจ
- DTO์ package์ด๋ฆ์ ๋ค ์ ์ด์ค์ผํจ
- ์์ฑ์ ๋ฐฉ์๋ง ์ง์ํจ
Querydsl ๋น ์์ฑ(Bean population)
- ๊ฒฐ๊ณผ๋ฅผ DTO ๋ฐํํ ๋ ์ฌ์ฉํจ
- 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ง์ํจ
- ํ๋กํผํฐ ์ ๊ทผ
- ํ๋ ์ง์ ์ ๊ทผ
- ์์ฑ์ ์ฌ์ฉ
[ํ๋กํผํฐ ์ ๊ทผ - Setter]
List<MemberDto> result = queryFactory
.select(Projections.bean(MemberDto.class,
member.username,
member.age))
.from(member)
.fetch();
[ํ๋ ์ง์ ์ ๊ทผ]
List<MemberDto> result = queryFactory
.select(Projections.fields(MemberDto.class,
member.username,
member.age))
.from(member)
.fetch();
[ํ๋ ์ง์ ์ ๊ทผ-๋ณ์นญ์ด ๋ค๋ฅผ ๋]
List<UserDto> fetch = queryFactory
.select(Projections.fields(UserDto.class, member.username.as("name"),
ExpressionUtils.as( JPAExpressions
.select(memberSub.age.max())
.from(memberSub), "age")
)
).from(member)
.fetch();
[์์ฑ์ ์ฌ์ฉ]
List<MemberDto> result = queryFactory
.select(Projections.constructor(MemberDto.class,
member.username,
member.age))
.from(member)
.fetch();
@QueryProjection ํ์ฉ
[Dto ์์ฑ์์ @QueryProjection ์ถ๊ฐ]
...
@QueryProjection
public MemberDto(String username, int age) {
this.username = username;
this.age = age;
}
...
[@QueryProjection ํ์ฉ]
List<MemberDto> result = queryFactory
.select(new QMemberDto(member.username, member.age))
.from(member)
.fetch();
- ์ฅ์ : ์ปดํ์ผ๋ฌ๋ก ํ์ ์ฒดํฌ๋ฅผ ํ ์ ์์
- ์ฃผ์์ : ๋ค๋ง DTO์ Querydsl ์ ๋ํ
์ด์
์ ์ ์งํด์ผํ๋ฉฐ, DTO๊น์ง Qํ์ผ์ ์์ฑํด์ผ ํจ.
- DTO๊ฐ Querydsl์ ์์กด์ฑ์ ๊ฐ์ง. ์๋น์ค, ์ปจํธ๋กค๋ฌ ๊ณ์ธต์์๋ ์ฌ์ฉ๋๋ DTO๋ก์๋ ๊น๋ํ์ง ๋ชปํ ๋ฐฉ๋ฒ.
์กฐํ์ฟผ๋ฆฌ๊ฐ ๋๋ฌด ๋ณต์กํ ๋
- ํน์ ํ ๊ธฐ๋ฅ์ ๋ง์ถฐ์ง ์กฐํ ๊ธฐ๋ฅ์ผ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก MemberQueryRepository๋ฅผ ์์ฑํ๊ณ ์ฃผ์ ๋ฐ์์ ์ฌ์ฉํ๊ธฐ.