๐Ÿ๏ธ Spring

์ƒ์ˆ˜ ์ƒ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Expressions.constant(์ƒ์ˆ˜)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ /** * ์ƒ์ˆ˜ * Expressions ์‚ฌ์šฉ */ @Test fun testConstant() { //given val fetch = query .select(member.username, Expressions.constant("A")) .from(member) .fetch() fetch.forEach { println(it) } } ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž ๋”ํ•˜๊ธฐ ๊ฒฐ๊ณผ์— ๋ฌธ์ž์—ด์„ ๋”ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. concat() : ๋ฌธ์ž์—ด ๋’ค์— ์ด์–ด์„œ ๋”ํ•ฉ๋‹ˆ๋‹ค. prepend() : ๋ฌธ์ž์—ด์˜ ๋งจ ์•ž์— ๋”ํ•ฉ๋‹ˆ๋‹ค. /** * ๋ฌธ์ž ๋”ํ•˜๊ธฐ * concat * ์•ž์— ๋”ํ• ๋•Œ๋Š” prepend */..
CASE๋ฌธ select, ์กฐ๊ฑด์ ˆ(where), orderBy ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์กฐ๊ฑด /** * (DB๊ฐ€ ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•˜๋Š”๊ฒƒ์„ ์ถ”์ฒœ) * Case ๋ฌธ */ @Test fun testCase() { //given val fetch = query .select( member.age .`when`(10).then("์—ด์‚ด") .`when`(20).then("์Šค๋ฌด์‚ด") .otherwise("๊ธฐํƒ€") ) .from(member) .fetch() fetch.forEach { println(it) } } ๋ณต์žกํ•œ ์กฐ๊ฑด - CaseBuilder ์‚ฌ์šฉ /** * ๋ณต์žกํ•œ Case ๋ฌธ * CaseBuilder ์‚ฌ์šฉ */ @Test fun complexCase() { //given val fetch = ..
์„œ๋ธŒ์ฟผ๋ฆฌ JPAExpressions์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. JPQL๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ from์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด select์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜ ์‚ฌํ•ญ ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ๋ณ„์นญ์ด ๊ฒน์น˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ, ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, QType์„ ์ƒ์„ฑํ•  ๋•Œ Alias๋ฅผ ์ง์ ‘ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. from์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ ํ•ด๊ฒฐ๋ฐฉ์•ˆ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ join์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.(๊ฐ€๋Šฅํ• ์ˆ˜๋„, ๋ถˆ๊ฐ€๋Šฅํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ๋ถ„๋ฆฌํ•ด์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. nativeSQL์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์˜ˆ์‹œ /** * ์„œ๋ธŒ ์ฟผ๋ฆฌ * com.querydsl.jpa.JPAExpressions ์‚ฌ์šฉ * * ๋‚˜์ด๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํšŒ์› ์กฐํšŒ */ @Test fun testSubQuer..
์กฐ์ธ ์กฐ์ธ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. join(์กฐ์ธ ๋Œ€์ƒ, ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉํ•  Qํƒ€์ž…) ์ผ๋ฐ˜ ์กฐ์ธ /** * ํŒ€ A์— ์†Œ์†๋œ ๋ชจ๋“  ํšŒ์›(select, from)์„ ์ฐพ๊ธฐ */ @Test fun join() { val fetch = query .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) //.where(member.team.name.eq("teamA")) - ๋˜‘๊ฐ™๋‹ค .fetch() fetch.forEach { println(it) } fetch.forEach { println(it.team) } } ์„ธํƒ€์กฐ์ธ - ์—ฐ๊ด€๊ด€๊ณ„ ์—†๋Š” ์กฐ์ธ /** * ์„ธํƒ€ ์กฐ์ธ - ์—ฐ๊ด€๊ด€๊ณ„ ์—†๋Š” ์กฐ์ธ * * ํšŒ์›์˜ ์ด๋ฆ„์ด ํŒ€ ์ด๋ฆ„(from)๊ณผ ..
GroupBy ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด GroupBy๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. having์„ ํ†ตํ•ด ๊ทธ๋ฃนํ™”๋œ ๊ฒฐ๊ณผ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์…‹์—… ์ฝ”๋“œ @BeforeEach fun before() { val teamA = Team(name = "teamA") val teamB = Team(name = "teamB") em.persist(teamA) em.persist(teamB) val members = listOf( Member(username = "member1", age = 10, team = teamA), Member(username = "member2", age = 20, team = teamA), Member(username = "member3", age = 30, team = teamB), Memb..
์ง‘๊ณ„ (count, sum, avg, max, min) ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” ๊ทธ๋ฃน ๋ณ„๋กœ ๊ทธ๋ฃนํ•‘๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. COUNT() : ์ด ๊ฐœ์ˆ˜ SUM() : ํ•ฉ AVG() : ํ‰๊ท  MAX() : ์ตœ๋Œ€๊ฐ’ MIN() : ์ตœ์†Œ๊ฐ’ ์‚ฌ์šฉ ์˜ˆ์‹œ ์…‹์—… ์ฝ”๋“œ @BeforeEach fun before() { val teamA = Team(name = "teamA") val teamB = Team(name = "teamB") em.persist(teamA) em.persist(teamB) val members = listOf( Member(username = "member1", age = 10, team = teamA), Member(username = "member2", age = 20, team = teamA), Member(..
์ •๋ ฌ ์ •๋ ฌ์€ orderBy()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. desc(), asc() : ๋‚ด๋ฆผ์ฐจ์ˆœ, ์˜ค๋ฆ„์ฐจ์ˆœ nullsLast() : null ์ธ ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. nullsFirst() : null ์ธ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ฒ˜์Œ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. setup ์ฝ”๋“œ @BeforeEach fun before() { val teamA = Team(name = "teamA") val teamB = Team(name = "teamB") em.persist(teamA) em.persist(teamB) val members = listOf( Member(username = "member1", age = 10, team = teamA), Member(username = "member2", age = 20, team ..
๊ฒฐ๊ณผ ์กฐํšŒ ๋ฉ”์†Œ๋“œ fetch() : ๋ฆฌ์ŠคํŠธ ์กฐํšŒ, ๋ฐ์ดํ„ฐ ์—†๋Š” ๊ฒฝ์šฐ ๋นˆ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ fetchOne() : ๋‹จ ๊ฑด ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด null ๊ฒฐ๊ณผ๊ฐ€ ๋‘˜ ์ด์ƒ์ด๋ฉด NonUniqueResultException fetchFirst() : limit(1).fetchOne()๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ QueryDSL 5.0 ๋ฒ„์ „์—์„œ Deprecate๋œ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. fetchResult() : ํŽ˜์ด์ง• ์ •๋ณด ํฌํ•จ, total count ์ฟผ๋ฆฌ ์ถ”๊ฐ€ ์‹คํ–‰ fetchCount() : count ์ฟผ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ count ์ˆ˜ ์กฐํšŒ Reference ์‹ค์ „! Querydsl - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ Querydsl์˜ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค๋ฌด ํ™œ์šฉ๊นŒ์ง€, ํ•œ๋ฒˆ์— ํ•ด๊ฒฐํ•ด๋ณด์„ธ์š”!, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ, ๋™์  ์ฟผ๋ฆฌ๋Š” ์ด์ œ ์•ˆ๋…•! Querydsl๋กœ ์ž๋ฐ” ๋ฐฑ์—”๋“œ..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (12 Page)