QueryDSL ์ SQL, JPQL ๋ฑ์ ์ฝ๋๋ก ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ๋น๋ ์คํ์์ค ํ๋ ์์ํฌ ์ด๋ค.
QueryDSL JPA
- SQL, JPQL์ ์ฝ๋๋ก ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ๋น๋ API์ด๋ค.
- Entity ํด๋์ค์ ๋งคํ๋๋ QClass ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค.
QClass ?
QueryDSL์ ์ปดํ์ผ ๋จ๊ณ์์ ์ํฐํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก QClass๋ฅผ ์์ฑํ๋๋ฐ JPAAnnotationProcessor
๊ฐ ์ปดํ์ผ ์์ ์ ์๋ํด์ @Entity ๋ฑ์ ์ ๋
ธํ
์ด์
์ ์ฐพ์ ํด๋น ํ์ผ์ ๋ถ์ํด์ QClass
๋ฅผ ๋ง๋ ๋ค.
๐ QClass๋ Entity์ ํํ๊ฐ ๋๊ฐ์ static class์ด๋ค.
๐ QueryDSL์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋, QClass๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค.
๐โโ๏ธ ์ฌ์ฉ ์ด์ ?
EntityClass์์๋ property์ ์ ๊ทผ์ ํ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
๊ทธ๋ ์ Meta Class ์ฆ, staticํ class๋ฅผ ๋ง๋ค์ด ์ง์ํ๊ฒ ๋๋ฉด, ๊ฐ์ฒด ์์ฑ์์ด static์ด๋ฏ๋ก property์ ๋ฐ๋ก ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋์ QueryDSL์ ์ฌ์ฉํ ๋, ํด๋น Entity ํด๋์ค์ property์ ์ ๊ทผ์ ๋ฐ๋ก ํ ์ ์์๋ ๊ฒ์ด๋ค.
JPQL ?
JPA์์ ์ง์ํ๋ ๋ค์ํ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๋จ์ํ ์กฐํ ๋ฐฉ๋ฒ์ผ๋ก, SQL์ ๊ฒฝ์ฐ์๋ DB ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ง๋ง, JPQL์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ค.
EX)
String jpql = "select m from Member m where m.name like '%yun%'";
List<Member> result = em.createQuery(jpql, Member.class).getResultList();
JPQL ๋ฌธ์ ์
- ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ ํ ๋ฌธ์์ด๋ก ์ ๋ ฅํ๋ค. -> ์คํ๋ฅผ ๋ฐ์ํ๊ฑฐ๋ ๊ด๋ฆฌํ๋๋ฐ ์์ด์ ์ด๋ ค์์ด ๋ฐ๋ฅด๊ณ , type-check๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์๊ณ , ๋ฐํ์์์ ํด๋น ์ฟผ๋ฆฌ๊ฐ ์คํ๋์ด์ผ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค. -> ํ ์คํธ ์ฝ๋๋ก ํ์ธ ๊ฐ๋ฅํ์ง๋ง, ์คํ ํ๋ก๊ทธ๋จ์ ์ด์ํ๋ฉด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ๋ถ๋ด์ด ์ปค์ง๋ค.
QueryDSL JPA๋ JPQL์ด ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํด์ค๋ค.
QueryDSL JPA๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ?
- ์ฟผ๋ฆฌ๋ฅผ ๋ฌธ์์ด์ด ์๋๋ผ ์ฝ๋๋ฅผ ํตํด์ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์คํ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ์ ์ด์ง๊ณ , ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๋ค.
- ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
EX)
return jpaQueryFactory
.from(member)
.join(member.point, point)
fetch();
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SimpleJdbcInsert ์ฌ์ฉ ์, ์๋ ์ปฌ๋ผ ๋ฌธ์ ๋ฐ์ (0) | 2024.04.11 |
---|---|
Spring Retry (0) | 2023.03.04 |
์น ์๋ฒ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ (0) | 2022.10.20 |
๊ธฐ์ด ์ง์ - 2 REST API (0) | 2022.09.01 |
๊ธฐ์ด ์ง์ - 1 (0) | 2022.09.01 |