Query Builder - JPQL vs QueryDsl

2023. 5. 20. 17:40·📦 Database/QueryDSL

💡 JPQL vs QueryDsl

EntityManafer와 JPAQueryFactoru를 클래스의 생성자로 준다.


테스트 코드 작성


JPQL과 QueryDSL의 차이점

  • JPQL(문자)은 실행 시점에 오류가 나고 QueryDsl(코드)은 컴파일 타임에 오류가 난다.
  • JPQL은 파라미터 바인딩을 직접하지만, QueryDsl은 동적으로 처리된다.

Q-Type에 별칭을 지정할 수 있다.


실행되는 JPQL을 보고 싶으면 application.yml에 다음을 추가한다.

spring.jpa.properties.hibernate.use_sql_comments: true

@SpringBootTest  
@Transactional  
class QueryDslBasicTest @Autowired constructor(  
    @PersistenceContext  
    val em: EntityManager,  
    val emf: EntityManagerFactory,  
    val queryFactory: JPAQueryFactory  
) {  

    @BeforeEach  
    fun before() {  
        val teamA = Team("teamA")  
        val teamB = Team("teamB")  
        em.persist(teamA)  
        em.persist(teamB)  
        val member1 = Member("member1", 10, teamA)  
        val member2 = Member("member2", 20, teamA)  
        val member3 = Member("member3", 30, teamB)  
        val member4 = Member("member4", 40, teamB)  
        em.persist(member1)  
        em.persist(member2)  
        em.persist(member3)  
        em.persist(member4)  
    }  

    @Test fun startJPQL() {  

        val qlString: String = """  
            select m from Member m  
            where m.name =: name  
        """.trimIndent()  

        val findMember = em.createQuery(qlString, Member::class.java)  
            .setParameter("name", "member1")  
            .singleResult  

        assertThat(findMember.name).isEqualTo("member1")  
    }  

    @Test  
    fun startQuerydsl() {  

        // Q Type 별칭 지정  
        val m = QMember("m")  

        val findMember = queryFactory  
            .select(m)  
            .from(m)  
            .where(m.name.eq("member1"))  
            .fetchOne()  

        assertThat(findMember?.name).isEqualTo("member1")  
    }  
}
저작자표시

'📦 Database > QueryDSL' 카테고리의 다른 글

Query Builder - Sort, Paging  (0) 2023.05.20
Query Builder - 검색 조건 쿼리  (0) 2023.05.20
Query Builder - 초기 설정  (2) 2023.05.20
QueryDsl - Boolean Builder  (0) 2023.05.19
QueryDsl - 성능 개선  (0) 2023.05.19
'📦 Database/QueryDSL' 카테고리의 다른 글
  • Query Builder - Sort, Paging
  • Query Builder - 검색 조건 쿼리
  • Query Builder - 초기 설정
  • QueryDsl - Boolean Builder
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      GStreamer #Pipeline
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Query Builder - JPQL vs QueryDsl
    상단으로

    티스토리툴바