Java/Spring

[SpringBoot/JPA] ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” @Query

๋ฒผ๋ฆฌ01 2024. 3. 12. 21:32

์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ž€ SQL์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์™€ ์ปฌ๋Ÿผ์„ ๊ฒฐํ•ฉํ•ด ๊ตฌ์„ฑํ•˜์—ฌ ๊ทธ ์ž์ฒด๊ฐ€ JPA์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ `findById` ์ฒ˜๋Ÿผ ์ปฌ๋Ÿผ๋ช…๊ณผ ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๊ตฌ์„ฑํ•œ๋‹ค. 

 

 

์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ 

 

 

Spring Data JPA(์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ)

Spring Data JPA๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. • ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์œผ๋กœ ์ฟผ๋ฆฌ ์ƒ์„ฑ ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋Š” Repository ์ธํ„ฐํŽ˜์ด์Šค์— ๊ฐ„๋‹จํ•œ ๋„ค์ด๋ฐ ๋ฃฐ์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์›ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ

kihwan95.tistory.com

 

 

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ œ๋ชฉ์— ํŠน์ • ํ‚ค์›Œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€์„ bno์˜ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

Page<Board> findByTitleContainingOrderByBnoDesc(String keyword, Pageable pageable);

 

 

์ด์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ๋ฐฉ์‹๋Œ€๋กœ SQL์„ ์˜๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค๋ ฅ์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฉ”์†Œ๋“œ๋ช…์ด ์ง€๋‚˜์น˜๊ฒŒ ๊ธธ์–ด์ง€๊ฑฐ๋‚˜ ๋ณต์žกํ•ด์ง„๋‹ค. ๊ทธ ์ด์œ ๋กœ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ๋Š” ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋ฅผ ๋ณด์™„ํ•˜๋Š” `@Query` ์• ๋„ˆํ…Œ์ด์…˜์ด ์žˆ๋‹ค. `@Query`๋กœ JPQL์„ ์ด์šฉํ•˜์—ฌ SQL๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์œ„์—์„œ ์˜ˆ๋กœ ๋“ค์—ˆ๋˜ `findByTitleContainingOrderByBnoDesc()`๋ฅผ `@Query`๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

@Query("select b from Board b where b.title like concat('%', :keyword, '%')")
Page<Board> findKeyword(String keyword, Pageable pageable);

 

 

๐Ÿ“Œ์žฅ์ 

1. ์กฐ์ธ๊ณผ ๊ฐ™์ด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์›ํ•˜๋Š” ์†์„ฑ๋งŒ ์ถ”์ถœํ•ด์„œ DTO๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

3. nativeQuery ์†์„ฑ ๊ฐ’์„ true๋กœ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ๋ฒ ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋™์ž‘ํ•˜๋Š” SQL์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.