Spring/๐Ÿ”ฅ[spring]์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ ์›น ํ”„๋กœ์ ํŠธ_๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ

2.6.2 @Query ์–ด๋…ธํ…Œ์ด์…˜

1son 2023. 1. 31. 12:08

์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ๊ฐ„๋‹จํ•œ ์ฒ˜๋ฆฌ๋งŒ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๊ณ , 

@Query๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. 

 

@Query์˜ ๊ฒฝ์šฐ๋Š” ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ์ƒ๊ด€์—†์ด ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด 

๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

@Query์˜ value๋Š” JPQL๋กœ ์ž‘์„ฑํ•˜๋Š”๋ฐ ํ”ํžˆ '๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ'๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ตฌ๋ฌธ๋“ค์ž…๋‹ˆ๋‹ค. 

 

@Query๋ฅผ ์ด์šฉํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

- ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅ

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋Š” ์ˆœ์ˆ˜ํ•œ SQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ

- insert, update, delete์™€ ๊ฐ™์€ select๊ฐ€ ์•„๋‹Œ DML ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ

 

๊ฐ์ฒด์ง€ํ–ฅ์ฟผ๋ฆฌ๋Š” ํ…Œ์ด๋ธ” ๋Œ€์‹ ์— 

์—”ํ‹ฐํ‹ฐํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๊ณ , 

 

ํ…Œ์ด๋ธ”์˜ ์นผ๋Ÿผ ๋Œ€์‹ ์— ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ํ•„๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

JPQL์€ SQL๊ณผ ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์„ ์ œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ถ”๊ฐ€์ ์ธ ํ•™์Šต ์—†์ด๋„ 

์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

 

์˜ˆ๋ฅผ๋“ค์–ด 'mno์˜ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ผ'๋ผ๋Š” ๊ธฐ๋Šฅ์„ @Query๋ฅผ ์ด์šฉํ•ด์„œ ์ œ์ž‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

@Query("select m from Memo m order by m.mno desc")
List<Memo> getListDesc();

JPQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๋Œ€์‹ ์— ์—”ํ‹ฐํ‹ฐํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ SQL๊ณผ ๋น„์Šทํ•œ JPQL์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

 

@Query์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ

 

@Query์˜ ๊ฒฝ์šฐ ์ง์ ‘ SQL๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— 

'where'๊ตฌ๋ฌธ๊ณผ ๊ทธ์— ๋งž๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. 

 

์˜ˆ๋ฅผ ๋“ค์–ด ':ํŒŒ๋ผ๋ฏธํ„ฐ'๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

@Transactional
@Modifying
@Query("update Memo m set m.memoText = :memoText where m.mno = :mno ")
int updateMemoText(@Param("mno") Long mno, @Param("memoText") String memoText);

 

 

Chapter 03 | ์Šคํ”„๋ง MVC์™€ Thymeleaf

 

3์žฅ์—์„œ๋Š” ์‹ค์ œ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ”„๋ง MVC์„ค์ •๊ณผ Thymeleaf๋ผ๋Š” ๊ธฐ์ˆ ์„ ๋ฐฐ์›๋‹ˆ๋‹ค. 

 

์ด๋ฒˆ์žฅ์—์„œ ํ•™์Šตํ•˜๋Š” ๋‚ด์šฉ 

: Thymeleaf๋ฅผ ์ด์šฉํ•œ ํ™”๋ฉด ์ถœ๋ ฅ๊ณผ ๋ฐ˜๋ณต, ์ œ์–ด ์ฒ˜๋ฆฌ

: ๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋‚ ์งœ, ์‹œ๊ฐ„ ์ฒ˜๋ฆฌํ•˜๊ธฐ

: ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ ๊ตฌ์„ฑํ•˜๊ธฐ 

 

 

 

3.1 Thymelaf๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

 

 

Thymleaf๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ์— ์ถ”๊ฐ€๋˜๋Š” templates ํด๋”๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ

templates ํด๋” ๋‚ด์— sample ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ex1.htmlํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

Thymeleaf์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด์˜ ์†์„ฑ ์•ž์— 'th:'๋ฅผ ๋ถ™์—ฌ์ฃผ๊ณ  

์†์„ฑ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ