Hibernate์ QueryMethod
์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ๋ฐฐ์ ๋ ์์ ๋ฅผ ๋ค์ ํ๋ฒ ๊ฐ๋ณ๊ฒ ๋ด๋ณด์.


Test ์ฝ๋์ด๋ ์ด๋ค ์๋น์ค์ด๋ ๋ชจ๋ findById() ๋ฉ์๋๋ฅผ ํตํด์ id ๊ฐ์ผ๋ก ๊ฒ์์ ํ๋ค. ํ์ง๋ง ์๊ฐํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์ ๊ฒ์์ ํ  ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ account ์ ๋ณด๋ฅผ ํตํด์ ๊ฒ์์ ํ๋ค.

์ฐ๋ฆฌ๋ ํ์ฌ 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 = ? ๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ด๋ค.
										
									
										
									
										
									
๋๊ธ