JPQL Named Query & Parameter Binding

2023. 4. 16. 01:03·📦 Database/JPQL

💡 Named 쿼리 - 정적 쿼리

  • 엔티티 클래스에 미리 정의해서 이름을 부여해두고 사용하는 JPQL
  • 쿼리에 이름을 부여하며, 이름을 통해 쿼리를 불러오기가 가능하다.
  • 어노테이션, XML에 정의 (XML이 항상 우선권을 가진다.)
  • 어플리케이션 로딩 시점에 초기화 후 재사용 (SQL 로 파싱하여 쿼리를 캐싱함)
  • 어플리케이션 로딩 시점에 쿼리를 검증 - 컴파일 타임 시 에러 발생으로 인해 디버깅 용이
  • 보통 엔티티에 @NamedQuery보단 @Query가 사용하기 더 편하고 좋다.
// 엔티티 클래스에 정의
@Entity
@NamedQuery(
   name = "Member.findByUsername",
   query = "select m from Member m where m.username = :username")
public class Member {
...
}

// 사용
List<Member> resultList =
   em.createNamedQuery("Member.findByUsername", Member.class)
      .setParameter("username", "회원1")
      .getResultList();

// 이름 없는 Named Query
public interface MemberRepository extends JPARepository<Member, Long> {
    @Query("select m from Member m where m.address = ?1")
    Member findByAddress(String address);
}

💡 Parameter Binding

왠만하면 이름으로 바인딩하자.

위치 기준으로 바인딩 시 위치가 바뀌면 꼬일 수 있다.


이름 기준

Member result = em.createQuery(
    "select m from Member m where m.username = :username", Member.class)
    .setParameter("username", "member1")
    .getSingleResult();
  • SELECT m FROM Member m where m.username=:username

위치 기준

Member result = em.createQuery(
    "select m from Member m where m.username = ?1", Member.class)
    .setParameter(1, "member1")
    .getSingleResult();
  • SELECT m FROM Member m where m.username=?1
저작자표시 (새창열림)

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

JQPL 벌크 연산 & 엔티티 직접 사용  (0) 2023.04.16
JQPL 다형성 쿼리 & 결과 조회 API  (0) 2023.04.16
JPQL Paging API  (0) 2023.04.16
JPQL Projection  (0) 2023.04.16
JPQL Type Query & Sub Query  (0) 2023.04.16
'📦 Database/JPQL' 카테고리의 다른 글
  • JQPL 벌크 연산 & 엔티티 직접 사용
  • JQPL 다형성 쿼리 & 결과 조회 API
  • JPQL Paging API
  • JPQL Projection
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (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
    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    JPQL Named Query & Parameter Binding
    상단으로

    티스토리툴바