728x90
์๋ธ์ฟผ๋ฆฌ
JPAExpressions์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
JPQL๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก from์ ์ ์๋ธ์ฟผ๋ฆฌ๋ ์ง์๋์ง ์์ต๋๋ค.
๋จ ํ์ด๋ฒ๋ค์ดํธ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด select์ ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฃผ์ ์ฌํญ
์๋ธ์ฟผ๋ฆฌ์ ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋ณ์นญ์ด ๊ฒน์น๋ฉด ์๋๋ฏ๋ก, ๊ฐ์ ์ํฐํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, QType์ ์์ฑํ ๋ Alias๋ฅผ ์ง์ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
from์ ์ ์๋ธ์ฟผ๋ฆฌ ํด๊ฒฐ๋ฐฉ์
- ์๋ธ์ฟผ๋ฆฌ๋ฅผ join์ผ๋ก ํด๊ฒฐํ๋ค.(๊ฐ๋ฅํ ์๋, ๋ถ๊ฐ๋ฅํ ์๋ ์์ต๋๋ค)
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒ ๋ถ๋ฆฌํด์ ์คํํฉ๋๋ค.
- nativeSQL์ ์คํํฉ๋๋ค.
์ฌ์ฉ ์์
/**
* ์๋ธ ์ฟผ๋ฆฌ
* com.querydsl.jpa.JPAExpressions ์ฌ์ฉ
*
* ๋์ด๊ฐ ๊ฐ์ฅ ๋ง์ ํ์ ์กฐํ
*/
@Test
fun testSubQuery() {
//given
val m = QMember("memberSub")
val fetch = query
.selectFrom(member)
.where(
member.age.eq(
JPAExpressions.select(m.age.max())
.from(m)
)
)
.fetch()
}
์ฌ๋ฌ ์๋ธ์ฟผ๋ฆฌ ์์
IN ์ ์ ์๋ธ์ฟผ๋ฆฌ
/**
* ์๋ธ ์ฟผ๋ฆฌ
* In ์ฌ์ฉ
*/
@Test
fun testSubQueryIn() {
//given
val m = QMember("memberSub")
val fetch = query
.selectFrom(member)
.where(
member.age.`in`(
JPAExpressions
.select(m.age)
.from(m)
.where(m.age.gt(10))
)
)
.fetch()
}
์๋ธ ์ฟผ๋ฆฌ goe ์ฌ์ฉ
/**
* ์๋ธ ์ฟผ๋ฆฌ
* com.querydsl.jpa.JPAExpressions ์ฌ์ฉ
*
* ๋์ด๊ฐ ํ๊ท ์ด์์ธ ํ์
*/
@Test
fun testSubQuery2() {
//given
val m = QMember("memberSub")
val fetch = query
.selectFrom(member)
.where(
member.age.goe(
JPAExpressions.select(m.age.avg())
.from(m)
)
)
.fetch()
fetch.forEach { println(it) }
}
select ์ ์ subquery
/**
* select ์ ์๋ธ์ฟผ๋ฆฌ
*/
@Test
fun selectSubQuery() {
//given
val m = QMember("memberSub")
//when
val fetch = query
.select(member.username,
JPAExpressions
.select(m.age.avg()).from(m)
)
.from(member)
.fetch()
fetch.forEach { println(it) }
}
Reference
728x90
'๐๏ธ Spring > QueryDsl' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[QueryDSL] ์์์ ๋ฌธ์ ๋ํ๊ธฐ (Expressions.constant, concat) (2) | 2021.12.23 |
---|---|
[QueryDSL] CASE ๋ฌธ (0) | 2021.12.23 |
[QueryDSL] ์กฐ์ธ, ํ์น์กฐ์ธ (0) | 2021.12.23 |
[QueryDSL] GroupBy (0) | 2021.12.23 |
[QueryDSL] ์ง๊ณ ํจ์(count, sum, avg, max, min) (0) | 2021.12.23 |