๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’Š Java & Kotlin & Spring/- spring framework +

[Spring & SpringBoot-JPA] JPA Query Method - JPA ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ•˜์ž.

by Wonit 2020. 2. 17.

Hibernate์˜ QueryMethod

์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์› ๋˜ ์˜ˆ์ œ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ€๋ณ๊ฒŒ ๋ด๋ณด์ž.

 

UserRepositoryTest.java

 

 

UserController.java

 

 

Test ์ฝ”๋“œ์ด๋˜ ์–ด๋–ค ์„œ๋น„์Šค์ด๋˜ ๋ชจ๋‘ findById() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ id ๊ฐ’์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ํšŒ์› ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํšŒ์› account ์ •๋ณด๋ฅผ ํ†ตํ•ด์„œ ๊ฒ€์ƒ‰์„ ํ•œ๋‹ค.

 

์ง€์ธ์˜ github id ๋ฅผ ๊ฒ€์ƒ‰

 

์šฐ๋ฆฌ๋Š” ํ˜„์žฌ DB๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋‹ˆ id ์นผ๋Ÿผ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ง€, ์‹ค์ œ ์„œ๋น„์Šค์—์„œ id๋ฅผ ์™ธ์šฐ๊ธฐ๋ž€ ์ •๋ง ์–ด๋ ค์šด ์ผ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ์ ์„ QueryMethod๋ฅผ ํ†ตํ•ด์„œ ํšŒ์›์˜ account๋กœ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

findById๋Š” select๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” findById() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ id ๊ฐ’์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ–ˆ๋Š”๋ฐ ์ด๋Š” ์ •ํ™•ํžˆ ๋ง ํ•˜๋ฉด findBy๋ผ๋Š” ๋ฌธ๋ฒ•์„ ๋ณด๋ฉด JPA๊ฐ€ ์ž๋™์œผ๋กœ select ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ง์ด๋‹ค.

 

QueryMethod๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž

 

์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ•ด๋‹น repository ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ํšŒ์›์˜ ์ด๋ฆ„์œผ๋กœ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ userRepository๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  default ๊ฐ’์ธ findById๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋Š”๋ฐ findBy~์— ๋’ค๋Š” ๊ฒ€์ƒ‰์œผ๋กœ ์‚ฌ์šฉํ•  ํ•ด๋‹น ์นผ๋Ÿผ ๋ช…์„ ์ ์–ด์ฃผ๋ฉด๋œ๋‹ค.

 

Optional๋กœ User์˜ null ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•œ ๋’ค String ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ name ์„ ๋ฐ›์•„์„œ ํ•ด๋‹น name์„ ํ† ๋Œ€๋กœ JPA๊ฐ€ select ์ฟผ๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

 

select * from user where account = ? ์˜ ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด์ œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด์ž!

 

์„ ์ˆ˜ํ–‰ํ•˜๋ฉด findById๊ฐ€ ์•„๋‹Œ findByName์œผ๋กœ๋„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒ€์ƒ‰๋„ ๊ฐ€๋Šฅํ•˜๋‹ค!!

ํ•œ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ํ†ตํ•ด์„œ ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ์ด๋Š” ์œ„๋ฅผ ์ดํ•ด ํ–ˆ๋‹ค๋ฉด ์ •๋ง ์‰ฝ๋‹ค.

์šฐ์„  ํ•ด๋‹น Repository๋กœ ์ด๋™ํ•œ ๋’ค,

 

 

๋Š” select * from user where account = ? and name = ? ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ด๋‹ค.

๋Œ“๊ธ€