JPA 객체지향 쿼리 언어(JPQL) - Named 쿼리

2022. 7. 23. 23:10·공부/JPA
반응형

출처 : 자바 ORM 표준 JPA 프로그래밍 인프런 강의

 

JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다.

 

Named 쿼리

정적 쿼리

  • 미리 정의해서 이름을 부여해두고 사용하는 JPQL
  • 정적 쿼리만 가능함
  • 애노테이션, XML에 정의
  • 애플리케이션 로딩 시점에 초기화 후 재사용
  • 애플리케이션 로딩 시점에 쿼리를 검증

   

 

애노테이션

Member 클래스에 @NamedQuery 애노테이션을 추가해준다. name의 경우 Member를 붙여도 되고 안 붙여도 되지만 관례는 붙이는 것이므로 큰 이유가 없는 이상 붙이는 게 좋다. 

@NamedQuery(
        name = "Member.findByUsername",
        query = "select m from Member m where m.username = :username"
)
public class Member {

실행클래스에서 NamedQuery를 호출하고, 파라미터를 세팅하자.

List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class)
        .setParameter("username", "member1")
        .getResultList();

for (Member member1 : resultList) {
    System.out.println("member1 = " + member1);
}
Hibernate: 
    /* Member.findByUsername */ select
        member0_.id as id1_0_,
        member0_.age as age2_0_,
        member0_.TEAM_ID as TEAM_ID5_0_,
        member0_.type as type3_0_,
        member0_.username as username4_0_ 
    from
        Member member0_ 
    where
        member0_.username=?
member1 = Member{id=3, username='회원1', age=0}

 

개발할 때 개발자에게 가장 도움?이 되는 오류는 컴파일 시 나는 오류이다. 왜냐면 거의 바로 잡을 수 있기 때문이다.  Named 애노테이션은 애플리케이션 로딩 시점에서 쿼리를 SQL로 파싱하기 때문에 만약 쿼리문에 오타가 있고, SQL 문법과 맞지 않는다면 컴파일 오류가 발생한다.

@NamedQuery(
        name = "Member.findByUsername",
        query = "select m from Membersd m where m.username = :username" // Membersd 오타
)

 

 

XML 정의

  • persistence.xml
<persistence-unit name="jpabook" >
	<mapping-file>META-INF/ormMember.xml</mapping-file>
  • ormMember.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" version="2.1">
	<named-query name="Member.findByUsername">
    	<query><![CDATA[
        	select m
            from Member m
            where m.username = :username
        ]]></query>
    </named-query>
    
    <named-query name="Member.count>
    	<query>select count(m) from Member m</query>
    </named-query>
</entity-mappings>
  • XML이 항상 우선권을 가진다.
  • 애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/JPA' 카테고리의 다른 글
  • Spring Data JPA - 프로젝트 환경 설정
  • JPA 객체지향 쿼리 언어(JPQL) - 벌크 연산
  • JPA 객체지향 쿼리 언어(JPQL) - 엔티티 직접 사용
  • JPA 객체지향 쿼리 언어(JPQL) - 다형성 쿼리
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    JPA
    인프런
    백준
    넥사크로
    토비의스프링부트
    에러해결
    전자정부프레임워크
    oracle
    방통대
    egov
    토이프로젝트
    코딩테스트
    SQL
    IT
    MSA
    QueryDSL
    react
    프론트엔드
    기출문제
    springboot
    스프링부트
    RESTful
    Spring
    프로그래머스
    SpringBoot를 이용한 RESTful Web Service 개발
    알고리즘
    자바스크립트
    개발자
    운영체제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
JPA 객체지향 쿼리 언어(JPQL) - Named 쿼리
상단으로

티스토리툴바