JPQL은 Java Persistence Query Language의 약자로, Java에서 제공하는 영속성 API인 JPA에서 사용하는 쿼리 언어입니다.

SQL과 비슷한 문법을 가지고 있지만, 객체 지향적인 쿼리를 사용할 수 있는 것이 특징입니다.

이를 통해 개발자는 데이터베이스 테이블이 아닌 자바 객체에 집중할 수 있게 됩니다.

<aside> 📌 JPQL 특징 SELECT, UPDATE,DELETE 등의 키워드 사용은 SQL과 동일 INSERT는 persist() 메소드를 사용 키워드는 대소문자를 구분하지 않지만, 속성은 대소문자를 구분하므로 유의 엔티티 별칭은 필수는 아니지만 사용하는 것을 권고함

</aside>


JPQL 사용 방법

  1. 작성한 jpql(문자열 쿼리)을 entityManager.createQuery() 메소드를 이용해 Query 객체로 생성

  2. 쿼리 객체는 TypedQueryQuery 두 가지가 있음

  3. 쿼리 객체에서 제공하는 메소드를 호출해서 쿼리를 실행하고 데이터베이스를 조회한다.

    3-1. getSingleResult() : 결과가 정확히 한 행일 경우 사용하며 없거나 많으면 예외가 발생한다.

    3-2. getResultList( ) : 결과가 2행 이상일 경우 사용하며 컬렉션을 반환한다. (없으면 빈 컬렉션 반환)

단일행 단일열 조회 테스트 - TypedQuery

@Test
public void TypeQueryTest() {
    String jpql = "SELECT m FROM menu m where m.menuCode = 7";
    TypedQuery<String> query = entityManager.createQuery(jpql, String.class);

    String resultMenuName = query.getSingleResult();
    System.out.println("resultMenuName : " + resultMenuName);

    assertEquals("치즈볼", resultMenuName);
}

단일행 단일열 조회 테스트 - Query

@Test 
public void QueryTest() {
    String jpql = "SELECT m.menuName FROM menu m where m.menuCode = 7";
    Query query = entityManager.createQuery(jpql);

    String resultMenuName = (String) query.getSingleResult();
    System.out.println("resultMenuName : " + resultMenuName);

    assertEquals("치즈볼", resultMenuName);
}

다중행 다중열 조회 테스트