Post

[Querydsl] sqlํ•จ์ˆ˜(Sql functions)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” QueryDSL์—์„œ SQL ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•œ๋‹ค.

SQL Function์ด๋ž€? DB๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋ฅผ QueryDSL์—์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ. SQLExpressions ํด๋ž˜์Šค๋กœ ํ™œ์šฉํ•œ๋‹ค.


1. ๋ฌธ์ž์—ด ํ•จ์ˆ˜

1
2
3
4
5
// concat: ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ โ†’ "์ด๋ฆ„(๋‚˜์ด)"
SQLExpressions.concat(member.name, "(", member.age, ")")

// lower: ์†Œ๋ฌธ์ž ๋ณ€ํ™˜
SQLExpressions.lower(member.name)

2. ๋‚ ์งœ ํ•จ์ˆ˜

1
2
SQLExpressions.currentDate()              // ํ˜„์žฌ ๋‚ ์งœ
SQLExpressions.addDays(member.joinDate, 7)  // joinDate + 7์ผ

3. ์ˆ˜ํ•™ ํ•จ์ˆ˜

1
2
SQLExpressions.sqrt(member.age.doubleValue())  // ์ œ๊ณฑ๊ทผ
SQLExpressions.round(member.height)            // ๋ฐ˜์˜ฌ๋ฆผ

4. coalesce โ€” NULL ์ฒ˜๋ฆฌ

1
SQLExpressions.coalesce(member.nickname, "๋‹‰๋„ค์ž„ ์—†์Œ")   // null์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’

์ฃผ์š” ํ•จ์ˆ˜๋ฅผ ์ •๋ฆฌํ•˜๋ฉด:

๋ถ„๋ฅ˜ํ•จ์ˆ˜
๋ฌธ์ž์—ดconcat, lower
๋‚ ์งœcurrentDate, addDays
์ˆ˜ํ•™sqrt, round
NULLcoalesce(null โ†’ ๊ธฐ๋ณธ๊ฐ’)

๐Ÿ“Œ ์ฃผ์˜์‚ฌํ•ญ๊ณผ ํŒ

โš ๏ธ SQL ํ•จ์ˆ˜๋Š” DB ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ง€์› ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅด๋‹ค. ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ ํƒ€์ž… ๋ณ€ํ™˜์— ์ฃผ์˜ํ•˜๋ฉฐ, ํ•„์š”ํ•˜๋ฉด NumberTemplateยทStringTemplate์œผ๋กœ ํƒ€์ž…์„ ๋งž์ถ˜๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
QueryDSL SQL ํ•จ์ˆ˜ (SQLExpressions)
โ”œโ”€ ๋ฌธ์ž์—ด   concat, lower
โ”œโ”€ ๋‚ ์งœ     currentDate, addDays
โ”œโ”€ ์ˆ˜ํ•™     sqrt, round
โ””โ”€ NULL     coalesce
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
SQLExpressionsSQL ํ•จ์ˆ˜ ํ™œ์šฉ ํด๋ž˜์Šค
coalescenull์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ
Template๋ฏธ์ง€์› ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ์ •์˜

SQL ํ•จ์ˆ˜๋ฅผ QueryDSL์—์„œ ์“ฐ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ DB๋งˆ๋‹ค ์ง€์› ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ , ํƒ€์ž… ๋ณ€ํ™˜์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์ž.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.