공부기록/JPA

JPA-JPQL

jhs0129 2022. 1. 28. 22:21
320x100
반응형

JPQL

엔티티 객체를 조회하는 객체지향 쿼리이다 테이블 대상이 아닌 객체를 대상으로 쿼리를 실행한다

간단한 예시를 보면 아래 sql문은 테이블 전체를 조회하는 반면 jpql은 Member객체를 조회하는 것을 볼 수있다

실행이 될때는 결국 sql문을 변환되어 실행이 된다 이때 어느 한 데이터베이스에 종속 된 것이 아니기 때문에 방언만 변경을 해주면 해당 데이터베이스에 맞게 변환하여 실행한다

  • sql
    select * from Member m
  • jpql
    select m from Member m

기본 규칙

  • 엔티티나 속성에 관해서는 대소문자를 구별하지만 select, from 과 같은 키워드 문법에 대해서는 대소문자를 구별하지 않는다
  • from 절에는 클래스 명이 아닌 엔티티 명을 지정한다(@Entity(name="이곳에 지정한 이름"))
  • 별칭은 필수 이다, as는 생략할수 있다

기본 문법

 em.createQuery("select m from Member m where m.name= :name", Member.class)
    .setParameter("name", name);

:name - 파라미터를 이름으로 구분

em.createQuery("select m from Member m where m.name= ?1", Member.class)
    .setParameter(1, name);

?1 - 순서로 구분

반환 타입

  • TypeQuery - em.createQuery메소드 두번째 변수로 반환타입이 있으면 해당 클래스로 반환
  • Query - 반환타입을 지정을 안하거나 여러 값을 select할 경우 처럼 지정이 불가능 한경우

select시 DTO로 동시에 변환

em.createQuery("select new packge명.MemberDTO(m.name, m.age) from Member m", MemberDTO.class);

new 명령어와 함께 패키지명을 전부 작성해줘야 한다

페이징

setFirstResult(), setMaxResults()를 사용하여 시작점, 몇개를 가지고올지를 설정

Type

엔티티의 상속 구조에서 조회 대상을 특정 자식 타입으로 한정할 때 사용된다

Item(부모클래스) - Book, Movie(자식클래스)라고 할때

select i from Item i where type(i) = Book으로 하면 Book타입만 조회한다

사용자정의함수

데이터베이스 내에서 추가적으로 내가 정의한 함수를 불러오고 싶으면 미리 등록후 사용을 해야한다

  • 등록방법
    public class My extends H2Dialect{
      public My(){
          registerFunction("호출시 사용할 이름", new StandardSQLFunction("사용자정의함수이름", StandardBasicType.STRING));
      }
    }
    <property name="hibernate.dialect" value="패키지명.My">
    그외기본적으로 SQL에서 제공하는

orderBy,[inner] join, left [outer] join, theta join, in, all, any, some, 서브쿼리, 통계함수, 연산자, case

등을 지원한다 어떻게 사용하는지 보고 필요시 추가적으로 찾아보면 될듯 하다


이때 join, outer join은 JPA에서는 다른 엔티티와 연관관계를 가지기 때문에 문법이 약간 다르다

select m from Member m join m.team t 와 같이 연관관계를 가진 객체를 가지고 객체 그래프를 통해 조인을 한다

참고

자바 ORM 표준 JPA 프로그래밍 - 기본편_김영한 님 강의

https://www.inflearn.com/course/ORM-JPA-Basic

책 - 자바 ORM 표준 JPA 프로그래밍

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330

320x100
반응형