하이..!
최근에 QueryDSL 이라는 걸 알게 되었고 ... 이렇게 시간이 날때마다 틈틈이 정리해 두려고 한다.
오늘은 정말 간단하게 특정 데이터를 select 해오는 간단한 테스트 코드로 비교를 해봤다.
기본적인 QueryDSL 과 JPA 설정은 아래 링크를 참조하면된다.
https://devkingdom.tistory.com/241
@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을 잘만 활용하면 지루하던 반복작업이 많이 줄어들것 같다는 생각이 든다.
끝.
반응형
'Develop > Spring' 카테고리의 다른 글
[querydsl] querydsl 에서 서브쿼리 사용하는 법 (1) | 2021.07.05 |
---|---|
[querydsl] queryDsl 기본 문법 정리 - 조인 ( inner join, theta join , on 절 사용, left outer join, right outer join, fetch join) (0) | 2021.07.04 |
[querydsl] queryDsl 기본 문법 정리 - fetch, sort, paging, aggregation (0) | 2021.06.30 |
[queryDsl] QueryDsl 프로젝트 환경 세팅하기 (0) | 2021.06.29 |
[Spring] gradle 프로젝트에서 어떤 라이브러리를 주입받았는지 알고 싶을 때 (0) | 2021.06.10 |
댓글