JPQL vs QueryDSL 간단 비교
하이..!
최근에 QueryDSL 이라는 걸 알게 되었고 ... 이렇게 시간이 날때마다 틈틈이 정리해 두려고 한다.
오늘은 정말 간단하게 특정 데이터를 select 해오는 간단한 테스트 코드로 비교를 해봤다.
기본적인 QueryDSL 과 JPA 설정은 아래 링크를 참조하면된다.
https://devkingdom.tistory.com/241
[queryDsl] QueryDsl 프로젝트 환경 세팅하기
보통 처음으로 SpringBoot 프로젝트를 만들때는, https://start.spring.io/ 여기서 필요한 라이브러리도 넣고 해서 기본적인 건 세팅을 해준다. 그런데.. queryDsl 은 저기서는 안되어서 내부적으로 build.gradle
devkingdom.tistory.com
@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");
}
위의 코드는 JQPL 을 이용해서 작성한 코드이다.
@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이다.
queryDsl을 이용해서 코드를 짜면 일단 파라미터 바인딩이 자동으로 해결되는 장점이 있다.
실제로 코드를 실행시켜보면 위의 사진처럼 PreparedStatement 가 동작하여 자동으로 파라미터 바인딩을 해주는 것을 볼 수 있다.
그리고 또 엄청난 장점이 있는데 jpql 에서는 직접 쿼리를 스트링으로 입력해줘야하는데, querydsl은 자바코드로 이뤄져 있다. 만약에 스트링에서 오타가 나면 이게 ... 에러가 런타임 시점에 발생해버린다. ( 다들 아시는 것처럼 런타임 에러는 잡기가 쉽지 않고, 크리티컬하다.)
그런데 querydsl은 자바코드이다 보니깐 컴파일 시점에서 에러가 나서 개발단계에서 에러를 잡을 수 있기때문에 좋다.
그리고 querydsl 문법은 보시는 것처럼 굉장히 sql 문과 비슷한 구조로 이루어져 있다. 이는 굉장히 이해하기가 쉽다는 것을 뜻한다.
앞으로 공부를 더 해봐야겠지만, querydsl을 잘만 활용하면 지루하던 반복작업이 많이 줄어들것 같다는 생각이 든다.
끝.