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