본문 바로가기
Today I Learned 2024. 6. 27.

(24.06.27)[11주차] JPA 심화 강의 02 (마무리)

 

기존에 배웠던 JPA Repository 관련 심화 내용이 진행이 되었기 떄문에

해당 TIL에는 JPQL과 QueryDSL 중심으로 간단히 정리 (자세한 정리와 실습 코드들은 Notion 연계)

 

이번에는 간단한 정보를 훝는 것만으로도 이해하는데 조금 어려웠기 때문에 일단은 학습 시간내에 최대한 간추리고

추후,  QueryDSL은 한번더 자세하게 학습하여 다룰 수 있어야할 것


JPA 심화 강의 간단정리

더보기

JPQL, Java Persistence Query Language

  • Table 이 아닌 Entity(객체) 기준으로 작성하는 쿼리

EntityMananger.createQuery()

  • 쿼리 문자열과 Entity 를 직접 넣어서 쿼리를 작성
  • 변경시 관련 쿼리 String 모두 수정해야
  • 런타임 에러가 발생하기 때문에 오류를 잡기 어려움

@Qeury (repository interface)

  • @Query 의 인자값으로 간단하게 쿼리를 작성
  • Entity 명과 필드명을 직접적으로 체킹
    • EntityManager로 사용하는 JPQL의 단점을 해소

QueryDSL, Query Domain Specific Language

  • Entity 의 매핑정보를 쿼리에 적합하도록 쿼리 전용 클래스=Q클래스 로 재구성해주는 기술
    • build는 해줘야함

JPAQueryFactory

  • 재구성한 Q클래스를 객체/함수 를 사용해서 쿼리로 작성, 실행
  • JPAQueryFactory를 사용하기 위해 entityManager를 주입 해야할 필요
    • Bean 등록을 해줘야함
    • 관련 의존성을 Gradle에 주입해줘야함
    • annotationProcessor 가 Q클래스를 만들어줄 수 있음
  • 변수 바인딩으로 이름을 직접적으로 체킹 가능
    • ?변수순번 으로 사용
    • :변수명 으로 사용