๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ๊ณต๋ถํ๋ค๊ฐ ๋ฌธ๋, JPQL
๊ณผ QueryDSL
์ ์ฐจ์ด์ ์ด ๊ถ๊ธํด์ก๋ค!
๐ JPQL ์ฐธ๊ณ
JPQL
์ ๋ํด์๋ ๐๐ป์ด์ ์ ์์ฑํ ํฌ์คํ
๐๐ป์ด ์์ผ๋ ์ฐธ๊ณ ํ์!
Spring Data JPA๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ CRUD ๋ฉ์๋ ๋ฐ ์ฟผ๋ฆฌ ๋ฉ์๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ผ๋,
์ํ๋ ์กฐ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ํด์๋ ํ์ฐ์ ์ผ๋ก JPQL์ ์์ฑํ๊ฒ ๋๋ค.
๊ฐ๋จํ ๋ก์ง์ ์์ฑํ๊ธฐ ์ํด์๋ ๊ด์ฐฎ์ง๋ง, ๋ณต์กํ ๋ก์ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋์๋ ๋ฌธ์์ด์ด ๊ธธ์ด์ง๊ฒ ๋๋ค.
@Test
public void testJPQL() {
String qlString = "select m from Member m " +
"where m.userName = :userName";
Member findMember = em.createQuery(qlString, Member.class)
.setParameter("userName", "kang")
.getSingleResult();
assertThat(findMember.getUserName()).isEqualTo("kang");
}
JPQL
์ ๋ฌธ์์ด์ผ๋ก Type-Check๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
ํด๋น ๋ก์ง์ ์คํํ๊ธฐ ์ ๊น์ง๋ ์๋์ฌ๋ถ ํ์ธ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ์คํ ์์ ์ด ๋์ด์์ผ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋ค!
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ์ด QueryDSL
์ด๋ค!
QueryDSL
์ ๋ฌธ์์ด์ด ์๋ ์๋ฐ ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ์ปดํ์ผ ์์ ์ ๋ฌธ๋ฒ์ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ํ์ธํ ์ ์๋ค!
๋ํ ์๋์์ฑ ๋ฑ IDE์ ๋์์ ๋ฐ์ ์๋ ์๊ณ , ๋์ ์ฟผ๋ฆฌ ์์ฑ์ด ํธ๋ฆฌํ๋ค.
@Test
public void testQuerydsl() {
queryFactory = new JPAQueryFactory(em);
QMember m = new QMember("m");
Member findMember = queryFactory
.select(m)
.from(m)
.where(m.userName.eq("kang"))
.fetchOne();
assertThat(findMember.getUserName()).isEqualTo("kang");
}
QueryDSL
๋ฌธ๋ฒ์ ๋ํ SQL
๊ณผ ๊ต์ฅํ ๋น์ทํ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ง๋ฃจํ ๋ฐ๋ณต ์์
์ ์ค์ฌ์ฃผ๋ QueryDSL
์ ๋ํด ์์ผ๋ก๋ ๊พธ์คํ ๊ณต๋ถํด๋ด์ผ๊ฒ ๋ค๐