JPQL과 Querydsl에 차이

2023. 8. 28. 17:17·BackEnd/Querydsl

JPQL

JPQL은 지금까지 제가 사용한 형식입니다. 쿼리를 짜서 직접 실행하는 스타일입니다.

@Test
public void startJPQL() throws Exception {
     //member1을 찾아라.
     String qlString =
        "select m from Member m " +
        	"where m.username = :username";

     // when
     Member findMember = em.createQuery(qlString, Member.class)
          .setParameter("username", "member1")
          .getSingleResult();

      //then
      assertThat(findMember.getUsername()).isEqualTo("member1");
}

이렇게 jpql로 쿼리를 짠 뒤 파라미터 바인딩 처리를 해서 원하는 값을 가져올 수 있습니다.

단점은 실행 시점에 오류를 발견할 수 있다는 것입니다. 예를 들어 setParameter에 이름을 잘 못 넣어도 오류가 나지 않고 실행 후에 오류를 알 수 있습니다. 

 

Querydsl

@Test
public void startQuerydsl() throws Exception {
    // given
    QMember m = new QMember("m");

    // when
    Member findMember =  queryFactory
        .select(m)
        .from(m)
        .where(m.username.eq("member1")) //파라미터 바인딩 처리
        .fetchOne();

     //then
     assertThat(findMember.getUsername()).isEqualTo("member1");
}

Querydsl은 이렇게 자바 형식으로 쿼리를 짤 수 있습니다. 그래서 JPQL과 다르게 에러를 바로 발견할 수 있습니다.

또, 파라미터 바인딩 또한 m.username.eq()처럼 where문에서 바로 처리할 수 있습니다!! 

쿼리도 생각한 데로 나갑니다!!

 

JPQL vs Querydsl

  • 문법과 표현력
    • JPQL: JPQL은 SQL과 유사한 문법을 가지며, 엔티티와 그 관계를 기반으로 쿼리를 작성합니다. 객체 지향적인 방식으로 쿼리를 작성할 수 있으나, 복잡한 동적 쿼리 작성이나 쿼리의 가독성 부분에서 제한적일 수 있습니다.
    • Querydsl: Querydsl은 자바 코드에 DSL(Domain Specific Language)을 사용하여 쿼리를 작성합니다. 이로 인해 쿼리 작성에 높은 유연성과 표현력을 제공하며, 복잡한 동적 쿼리를 작성하기가 더 간편합니다.
  • 타입 안정성
    • JPQL: JPQL은 문자열 기반 쿼리 언어로, 쿼리 작성 시 컴파일 시점에서의 타입 안전성이 보장되지 않습니다. 오타나 잘못된 쿼리 작성으로 인한 오류가 런타임에 발생할 수 있습니다.
    • Querydsl: Querydsl은 자바 코드를 기반으로 쿼리를 작성하므로 컴파일 시점에서 타입 안전성이 보장됩니다. 쿼리 작성 시 오타나 잘못된 사용으로 인한 오류를 사전에 방지할 수 있습니다.
  • 동적 쿼리 작성
    • JPQL: JPQL에서 동적 쿼리를 작성하려면 문자열 연결과 조건문을 활용해야 하므로 복잡하고 가독성이 떨어질 수 있습니다.
    • Querydsl: Querydsl은 동적 쿼리 작성을 간단하게 할 수 있도록 지원합니다. 자바 코드로 조건을 생성하고 조합하여 쿼리를 작성하는데 유용합니다.
  • IDE 지원
    • JPQL: JPQL은 문자열 기반으로 쿼리를 작성하기 때문에 IDE(Integrated Development Environment)에서 쿼리 문법 하이라이팅이나 자동 완성을 제공하기 어렵습니다.
    • Querydsl: Querydsl은 자바 코드를 사용하기 때문에 IDE에서 코드 완성과 문법 하이라이팅을 지원해주어 쿼리 작성 시 실수를 줄일 수 있습니다.

 

출처

https://www.inflearn.com/course/querydsl-%EC%8B%A4%EC%A0%84/dashboard

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, 복잡한 쿼리, 동적 쿼리는 이제 안녕! Querydsl로 자바 백엔드 기술을 단단하게. 🚩 본 강의는 로드맵 과정입니다. 본 강의는 자바 백엔

www.inflearn.com

 

'BackEnd > Querydsl' 카테고리의 다른 글

Querydsl 기본 문법 (정렬, 페이징, 집합)  (1) 2023.08.28
Querydsl 기본 문법 (검색, 결과)  (0) 2023.08.28
Querydsl 세팅  (0) 2023.08.27
'BackEnd/Querydsl' 카테고리의 다른 글
  • Querydsl 기본 문법 (정렬, 페이징, 집합)
  • Querydsl 기본 문법 (검색, 결과)
  • Querydsl 세팅
인프라 감자
인프라 감자
  • 인프라 감자
    삶은 인프라
    인프라 감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • 클라우드&인프라 (28)
        • 인프라 공부 (4)
        • AWS 구조와 서비스 (18)
        • 클라우드 공부 (4)
        • Terraform (2)
      • AWS Cloud School (13)
        • project (5)
        • Linux, Network (6)
        • Docker (2)
      • BackEnd (162)
        • JAVA 공부 (15)
        • 알고리즘 공부 (71)
        • MySQL 문제 풀기 (8)
        • 스프링 핵심 원리 - 기본편 (18)
        • 스프링 MVC 1편 (4)
        • 자바 ORM 표준 JPA 프로그래밍 (21)
        • 실전! 스프링 부트와 JPA 활용1 (8)
        • 실전! 스프링 부트와 JPA 활용2 (5)
        • 스프링 데이터 JPA (8)
        • Querydsl (4)
      • 혼자하는 프로젝트 (32)
        • 배달의 민족 클론코딩 (7)
        • 나만의 프로젝트 (10)
        • 스프링 부트로 구현한 웹 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Email
    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    자바
    프로그래머스
    백트래킹
    디팬스 게임
    다이나믹 프로그래밍
    중첩 선언
    완전탐색
    linux
    네트워크 기본 용어
    쿼드 압축
    이것이 자바다
    VPN
    dp
    조합
    자동 배포
    스프링 핵심 원리-기본편
    정렬
    querydsl
    유니온 파인드
    상속
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
인프라 감자
JPQL과 Querydsl에 차이
상단으로

티스토리툴바