JPA 객체지향 쿼리 언어(JPQL) - JPQL 타입 표현과 기타식

2022. 7. 18. 22:03·공부/JPA
반응형

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

 

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

 

JPQL 타입 표현과 기타식

JPQL 타입 표현

  • 문자 : 'HELLO', 문자 내 싱글 쿼테이션(')을 표시하고 싶을 경우 싱글 쿼테이션을 두 개 써주면 된다. → 'She''s'
  • 숫자 : 10L(Long), 10D(Double), 10F(Float)
  • Boolean : TRUE, FALSE
  • ENUM : jpabook.MemberType.Admin (패키지명 포함)
  • 엔티티 타입 : TYPE(m) = Member (상속 관계에서 사용)

예제

String query = "select m.username, 'HELLO', TRUE from  Member m";

위와 같이 쿼리를 만들면 각각의 값들이 잘 뽑혀나오는 걸 확인할 수 있다.

// 출력 로그
Hibernate: 
    /* select
        m.username,
        'HELLO',
        TRUE 
    from
        Member m */ select
            member0_.username as col_0_0_,
            'HELLO' as col_1_0_,
            1 as col_2_0_ 
        from
            Member member0_
objects[0] = teamA
objects[1] = HELLO
objects[2] = true

참고로 임의로 컬럼 기술 부분에 넣은 값들은 DB에 저장되진 않는다.

 

ENUM 타입은 실습을 위해 Member와 관련된 ENUM 클래스를 생성한다.

public enum MemberType {
    ADMIN, USER
}

그리고 Member 클래스에 MemberTpye을 가져온다.

@Enumerated(EnumType.STRING)
private MemberType type;

그리고 실행 클래스에서 member 객체에 MemberType을 세팅해준다.

member.setType(MemberType.ADMIN);

그리고 쿼리를 아래와 같이 작성한다.

String query = "select m.username, 'HELLO', TRUE from  Member m" +
                " where m.type = jpql.MemberType.ADMIN";

쿼리가 제대로 나가고, 값이 제대로 출력되면 조건에 맞는 값을 조회해 온거니 정상적으로 작동된 것이다.

// 출력 로그
Hibernate: 
    /* select
        m.username,
        'HELLO',
        TRUE 
    from
        Member m 
    where
        m.type = jpql.MemberType.ADMIN */ select
            member0_.username as col_0_0_,
            'HELLO' as col_1_0_,
            1 as col_2_0_ 
        from
            Member member0_ 
        where
            member0_.type='ADMIN' //** ENUM 조건
objects[0] = teamA
objects[1] = HELLO
objects[2] = true

만약 member의 type을 ADMIN이 아닌 USER로 주면 List를 돌며 object[]의 값을 꺼내는 출력문이 보여지지 않을 것이다.

그런데 위의 방식은 패키지명을 적어야하는게 여간 귀찮은게 아니다. 대부분 실무에서는 위의 방식보다는 그냥 파라미터 방식으로 빼서 사용한다.

String query = "select m.username, 'HELLO', TRUE from  Member m" +
                " where m.type = :userType";
List<Object[]> result = em.createQuery(query)
        .setParameter("userType", MemberType.ADMIN)
        .getResultList();

 

 

JPQL 기타

  • SQL과 문법이 같은 식
  • EXISTS, IN
  • AND, OR, NOT
  • =, >, >=, <, <=, <>
  • BETWEEN, LIKE, IS NULL
반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/JPA' 카테고리의 다른 글
  • JPA 객체지향 쿼리 언어(JPQL) - JPQL 함수
  • JPA 객체지향 쿼리 언어(JPQL) - 조건식(CASE 등)
  • JPA 객체지향 쿼리 언어(JPQL) - 서브 쿼리
  • JPA 객체지향 쿼리 언어(JPQL) - 조인(JOIN)
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (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
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
JPA 객체지향 쿼리 언어(JPQL) - JPQL 타입 표현과 기타식
상단으로

티스토리툴바