JPQL part1
์ด์ ์ ๋ค์ํ ๊ฒ๋ค์ ๋ดค๊ฒ ์ง๋ง ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ๋ ํญ์ JPQL์ด ๋จผ์ ๋ก ์์๋๊ฒ ๋๋ค ์ผ๋จ ํ๋ฒ JPQL์ ํน์ง์ ์ ๋ฆฌํด๋ณด์
JPQL์ ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค. ๋ฐ๋ผ์ ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ
JPQL์ SQL์ ์ถ์ํํด์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดํ์ง ์์
JPQL๋ ๊ฒฐ๊ตญ์ SQL๋ก ๋ฐํ๋๋ค๋ ์
๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ์ฟผ๋ฆฌ API
JPQL๋ SQL๊ณผ ๋น์ทํ๊ฒ select, update, delete๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค :๊ทผ๋ฐ insert๋ ์ ์๋? -> EntityManager.persist()๋ก ์ ์ฅํ๋ฉด ๋๋๊น
SELECT ๋ฌธ
์์๋ฅผ ๋ด๋ณผ๊น
ํน์ง๋ณ๋ก ๋ณด์
๋์๋ฌธ์ ๊ตฌ๋ถ
์ํฐํฐ์ ์์ฑ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถ -> Member, username์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๊ณ select, from as ์ ๊ฐ์ JPQL ์ฉ์ด๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์
์ํฐํฐ ์ด๋ฆ
JPQL์์ ์ฌ์ฉํ Member๋ ํด๋์ค ๋ช ์ด ์๋๋ผ ์ํฐํฐ ๋ช ์ด๋ค. ์ํฐํฐ ๋ช ์ ๋ฐ๋ก ์ง์ ํ์ง ์๋ ์ด์์ ํด๋์ค๋ช ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํฐํฐ๋ช ์ผ๋ก ์ฒ๋ฆฌ ๊ทธ๋์ ๊ธฐ๋ณธ๊ฐ์ธ ํด๋์ค ๋ช ์ ์ํฐํฐ ๋ช ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ
๋ณ์นญ์ ํ์
๊ตณ์ด as์ ์ฌ์ฉํด์ ๋ณ์นญ์ ์ฌ์ฉํ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ, JPQL์ ๋ณ์นญ์ ํ์๋ก ์ฌ์ฉํด์ฃผ์ด์ผ ํ๋ค.
TypeQuery, Query
์์ฑํ JPQL์ ์คํํ๊ธฐ ์ํด์๋ ์ฟผ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ฟผ๋ฆฌ ๊ฐ์ฒด๋ก ์กด์ฌํ๋ ๊ฒ์ด TypeQuery, Query์ด๋ ๊ฒ ์กด์ฌํ๋๋ฐ ์ฐจ์ด์ ์ผ๋ก๋ ๋ฐํํ ํ์ ์ด ์๋ค๋ฉด TypeQuery, ๋ฐํํ ํ์ ์ ์ง์ ํ ์ ์๋ค๋ฉด Query ์ด๋ ๊ฒ ๋๋์ด ์ง๋ค TypeQuery, Query ์ฌ์ฉ๊ธฐ
์ฒซ ๋ฒ์งธ๋ ๋ฆฌํด๋ ํ์ ์ ๋ฏธ๋ฆฌ ์๊ณ ์์๊ธฐ ๋๋ฌธ์ ์กฐํํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ์ด๋ ต์ง ์๊ฒ ์ฌ์ฉํ๋ ๋ฐ๋ฉด ๋ ๋ฒ์งธ๋ ๋ฐํํ ํ์ ์ด ์ ๋งคํ๋ค ๋ณด๋๊น ์กฐ์ฃํ๋ ๊ฒ๋ ์ด๋ ต๊ฒ ์กฐํํ๋ ๋ชจ์ต์ด๋ค... ๊ทธ๋ ๊ตณ์ด ์ฐพ์์ ๋ ํ์ ๋ณํํ๊ณ ์์ง ๋ง๊ณ ๊ทธ๋ฅ ์ ์ด๋ถํฐ ์ ํด์ง ํ์ผ๋ก ๋นผ๋ฒ๋ฆฌ์.... ๊ฒฐ๊ณผ๋ฅผ ์กฐํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋
query.getResultList() : ๊ฒฐ๊ณผ๋ฅผ ์์ ๋ก ๋ฐํํ๊ณ ๋ง์ฝ์ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋น ์ปฌ๋ ์ ์ ๋ฐํ
query.getSingleResult() : ๊ฒฐ๊ณผ๊ฐ ์ ํํ ํ๋์ผ ๋ ์ฌ์ฉํจ - ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ NoResultException์ ๋์ง๊ณ ๊ฒฐ๊ณผ๊ฐ ํ๋๋ณด๋ค ๋ง์ผ๋ฉด NonUniqueResultException์ ๋์ง
ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ
JDBC์์๋ ์์น ๊ธฐ์ค ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ๋ง์ ์ง์ํ๊ณ ์์ง๋ง JPQL์ ์ด๋ฆ ๊ธฐ์ค ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ๋ ์ง์ํจ
์ด๋ฆ ๊ธฐ์ค ํ๋ผ๋ฏธํฐ
ํ๋ผ๋ฏธํฐ๋ฅผ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ด๊ณ , ์ด๋ฆ ๊ธฐ์ค ํ๋ผ๋ฏธํฐ ์์๋ :์ ์ฌ์ฉํ๋ค
:username ์ด๋ ๊ฒ ์ฌ์ฉํด์ฃผ๊ณ , query.setParameter(์ด๋ฆ, ๊ฐ) ์ด๋ ๊ฒ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ฐ์ธ๋ฉํด์ฃผ์
์์น ๊ธฐ์ค ํ๋ผ๋ฏธํฐ
์์น ๊ธฐ๋ฐ ํ๋ผ๋ฏธํฐ๋ ?(๋ฌผ์ํ) ๋ค์์ ์์น ๊ฐ์ ์ฃผ๋ ๊ฑธ๋ก ์์ํ๋ค ๊ทธ๋ฆฌ๊ณ query.setParameter(์์น, ๊ฐ) ์ผ๋ก ๊ฐ์ ๋ฐ์ธ๋ฉํด์ค
ํ๋ก์ ์
ํ๋ก์ ์ ์ด๋? select ์ ์ ์กฐํํ ๋์์ ์ง์ ํ๋ ๊ฒ์ ์๋ฏธํจ SELECT ํ๋ก์ ์ ๋์ FROM ์ด๋ ๊ฒ ๋์์ ์ง์ ํ๋๋ฐ ํ์ ์ผ๋ก๋ ๋ค์ํ๊ฒ ์๋ค
์ํฐํฐ ํ๋ก์ ์
์ ์ฟผ๋ฆฌ๋ฌธ 2๊ฐ ๋ค ์ํฐํฐ๋ฅผ ํ๋ก์ ์ ์ ๋์์ผ๋ก ์ ํด์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์กฐํํ๋ค ์ด๊ฑด ํ๋ํ๋ ์กฐํํ๋ SQL๊ณผ๋ ์ฐจ์ด๊ฐ ์์ ์ด๋ ๊ฒ ์กฐํํ ์ํฐํฐ๋ ์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌ๋จ
์๋ฒ ๋๋ ํ์
ํ๋ก์ ์
์ํฐํฐ์ ๋น์ทํ์ง๋ง ์ญ์ ์๋ฒ ๋๋ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์กฐํ์ ์์์ ์ด ๋ ์ ์๋ค๋ ์ ์ฝ์ด ์กด์ฌํ๋ค.
์๋ฒ ๋๋ ํ์ ์ ์ํฐํฐ ํ์ ์ด ์๋ ๊ฐ ํ์ ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ ๊ฒ ์ง์ ์กฐํํ ์๋ฒ ๋๋ ํ์ ์ ์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌ๋์ง ์๋๋ค
์ค์นผ๋ผ ํ์
ํ๋ก์ ์
์ซ์, ๋ฌธ์, ๋ ์ง์ ๊ฐ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ๋ค์ ์ค์นผ๋ผ ํ์ ์ด๋ผ๊ณ ์ ์ํ๋ค. ์๋ก ์ ์ฒด ํ์์ ์ด๋ฆ์ ์กฐํํ๊ธฐ ์ํด์๋
์ฌ๋ฌ ๊ฐ ์กฐํ
๋ง์ฝ์ ํ๋ก์ ์ ์์ ์ฌ๋ฌ ๊ฐ๋ค์ ์ ํํ๊ฒ ๋๋ ์๊ฐ, ์์์ ์ฌ์ฉํ๋ TypeQuery๋ ์ฌ์ฉํ ์ ์๊ณ ๋จ์ํ Query๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์์ ๋ก ํ์ธ
์ด๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ์ํฐํฐ ํ์ ๋ ์ฌ๋ฌ ๊ฐ์ ํจ๊ป ์กฐํํ ์ ์์
NEW ๋ช ๋ น์ด ์์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ result๋ฅผ ๋ฐ์์ฃผ๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ ๋ ๊ฒ Object[]์ผ๋ก ๋ฆฌํด๋ฐ์์ ๊ฐ๊ฐ ๋งคํํด์ฃผ๋ ๊ณผ์ ์ ๊ฑฐ์ณค๋๋ฐ, ์ด๋ฌํ ๋ฐฉ๋ฒ์ DTO๋ฅผ ์์ฑํจ์ผ๋ก์จ ์๋ฏธ ์๋ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ ๋ฐ์ ์ ์๋ค..! ๋์ DTO๋ฅผ ์์ฑํ๋๋ฐ ์์ด์ -> AllArgsConstructer๋ ํ์๋ก ํ์ํ๋ค๋์
new ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ --๋ง ๊ท์ฐฎ์ ๊ฐ์ฒด๋ณํ ์์ ์ ์์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์ ์ด ์ข๋ค์! ๊ทธ๋๋ ์ฃผ์ํ ์ 2๊ฐ์ง
ํจํค์ง ๋ช ์ ํฌํจํ ์ ์ฒด ํด๋์ค ๋ช ์ ์ ๋ ฅํด์ผ ํ๋ค๋ ์ !
์์์ ํ์ ์ด ์ผ์นํ๋ ์์ฑ์๊ฐ ํ์ํ๋ค๋ ์ !
ํ์ด์ง API
ํ์ด์ง ์ฒ๋ฆฌ์ฉ SQL์ ์์ฑํ๋ ์ผ์ ์ ๋ง ๋งค์ฐ ์ง๋ฃจํ ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ํ์ด์ง ์ฒ๋ฆฌํ๋ ์ฟผ๋ฆฌ๊ฐ ๋ค๋ฅด๋ค๋ ์ ๊ทธ๋์ JPA์์๋ 2๊ฐ์ API๋ก ์ถ์ํ ํด๋์๋ค
setFirstResult(int startPosition) : ์กฐํ ์์ ์์น
setMaxResult(int maxResult) : ์กฐํํ ๋ฐ์ดํฐ ์
์์ ์ฝ๋๋ 10์ด ์์์ด๊ธฐ ๋๋ฌธ์ 11๋ถํฐ 20๊ฐ๋ฅผ ์กฐํํ๋ค. ์ฆ 11 ~ 30๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค. ๋ง์ฝ ๋ ์ถ๊ฐ์ ์ผ๋ก ํ์ด์ง API๋ฅผ ์ต์ ํ์ํค๊ณ ์ถ๋ค๋ฉด ๋ค์ดํฐ๋ธ๋ก ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ผํ๋ค๋ ์ ์ ๊ธฐ์ตํ๊ณ ์์...!
์งํฉ๊ณผ ์ ๋ ฌ
์งํฉ์ ์งํฉํจ์์ ํจ๊ป ํต๊ณ ์ ๋ณด๋ฅผ ๊ตฌํ ๋ ์ฌ์ฉํจ
์งํฉ ํจ์
COUNT : ๊ฒฐ๊ณผ ์๋ฅผ ๊ตฌํ๋ค -> ๋ฐํ ๊ฐ Long
MAX, MIN : ์ต๋, ์ต์ ๊ฐ์ ๊ตฌํ๋ค -> ๋ฌธ์, ์ซ์, ๋ ์ง ๋ฑ์ ์ฌ์ฉ
AVG : ํ๊ท ๊ฐ์ ๊ตฌํ๊ณ ์ซ์ ํ์ ์๋ง ์ฌ์ฉํ ์ ์์ -> ๋ฐํ ๊ฐ double
SUM : ํฉ์ ๊ตฌํ๊ณ ์ซ์ ํ์ ์๋ง ์ฌ์ฉํ ์ ์์ -> ๊ฐ ๋ํ ํ์ ์ ๋ง๋ ๋ฐํ ๊ฐ์ ๋ฐํํจ
์ฃผ์ํ ์
null ๊ฐ์ ๋ฌด์๋๊ณ ์ง๊ณ๋จ
๊ฐ์ด ์๋๋ฐ min, max, avg, sum์ ๋๋ฆฌ๋ฉด null์ด ๋์ง๋ง count๋ 0์ด ๋จ
distinct๋ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๋์ ์ถ๋ ฅ๋จ
distinct๋ count๋ฅผ ์ฌ์ฉํ ๋ ์๋ฒ ๋๋ ํ์ ์ ์ง์ํ์ง ์์
GROUP BY, HAVING
GROUP BY ๋ ํต๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ ๋ ํน์ ๊ทธ๋ฃน๋ผ๋ฆฌ ๋ฌถ๋ ์์ฝ์ด์ด๋ค. HAVING์ GROUP BY์ ํจ๊ป ์ฌ์ฉํ๋๋ฐ GROUP BY๋ก ๊ทธ๋ฃนํํ ํต๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋ง ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ ์ด๋ฌํ๋ค
์ด๋ฌํ ์ฟผ๋ฆฌ๋ค์ ๋ณดํต ํต๊ณ(reporting)์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค ์์ฃผ ์ ์ฉํ๋ค๊ณ ๋ณผ ์ ์์ง๋ง ์ด๋ฏธ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌํ๋ ์ฟผ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์ค์๊ฐ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ์ด๋ ค์ ์์ฃผ ๋ง์ ๋ฐ์ดํฐ๋ค์ ํต๊ณ์ฒ๋ฆฌ ํ๊ธฐ์๋ ํต๊ณ ๊ฒฐ๊ณผ๋ง ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋ณ๋๋ก ๋ง๋ค์ด ๋๊ณ ์ฌ์ฉ์๊ฐ ์ ์ ์๋ฒฝ์ ๋๋ ค์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด ๋ฒ ์คํธ #### ORDER BY ORDER BY๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ฆผ์ฐจ์์ด๋, ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํด์ฃผ๋ ๋ฐฉ๋ฒ ```java orderby_์ ::= ORDER BY {์ํํ๋ ๊ฒฝ๋ก | ๊ฒฐ๊ณผ ๋ณ์ [ASC | DESC]}+ ``` ASC : ์ค๋ฆ์ฐจ์(๊ธฐ๋ณธ๊ฐ - ๋ฐ๋ก ์ค์ ์ํด๋ ์์์ ์ค๋ฆ์ฐจ์) DESC : ๋ด๋ฆผ์ฐจ์
Last updated
Was this helpful?