SQL과 오타
Mybatis, JDBC Template, JPQL 은 모두 쿼리문을 String 형식으로 직접 작성해서 구현하게 된다. 심지어 Spring Data JPA도 때때로 NativeQuery로 작성해야 한다. 백엔드 개발 경험이 한 번이라도 있다면, 쿼리를 작성하다가 오타가 난 경험이 있을 것이다. String으로 이뤄져 있기에 컴파일 단계에서 디버깅이 불가능하다. 그 말은 에러가 발생해도 띄어쓰기를 잘못 한 건지 대소문자를 잘못 쓴건지 알 수가 없다는 말이다.
QueryDSL은 자바코드로 쿼리를 만들기 때문에 컴파일 시점에서 오류를 잡을 수 있고, 메서드 형식으로 작성하기 때문에 IDE 코드 어시스턴트의 도움도 받을 수 있다. 특히 현업에서 여러 번의 Join과 동적쿼리를 작성할 때, 그 진가를 보여준다고 한다.
JPQL vs Query DSL
Select * From Member where id = 1L;
@Test
@Transactional
public void JPQL() {
Member findMember = em.createQuery("select m from Member m where m.id = :id",Member.class)
.setParameter("id",userId).getSingleResult();
}
@Test
@Transactional
public void DSL() throws Exception {
JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(em);
QMember m = new QMember("m"); //식별자
Member findMember = jpaQueryFactory
.select(m)
.from(m)
.where(m.id.eq(1L))
.fetchOne();
}
그렇다, QueryDSL이 더 길다. 하지만 다 아시다시피 라인 수가 중요한게 아니다. 한 눈에 들어오고 들여쓰기 덕분에 너무 편안하게 읽힌다. 앞서 언급한 컴파일 시점 오류 파악, 파라미터 바인딩까지 쿼리 길이가 길어질수록 차이가 커진다.
이상으로 JPQL vs Query DSL 포스팅을 마치겠습니다.
728x90
'[IT] > Querydsl' 카테고리의 다른 글
[Query DSL] package com.querydsl.core.types does not exist (0) | 2021.04.17 |
---|---|
[QueryDSL] Query DSL 기본문법 (0) | 2021.03.26 |
[QueryDSL] 인텔리제이 환경설정 (0) | 2021.03.26 |