JPQL
은 Java Persistence Query Language의 약자로, Java에서 제공하는 영속성 API인 JPA에서 사용하는 쿼리 언어입니다.
SQL과 비슷한 문법을 가지고 있지만, 객체 지향적인 쿼리를 사용할 수 있는 것이 특징입니다.
이를 통해 개발자는 데이터베이스 테이블이 아닌 자바 객체에 집중할 수 있게 됩니다.
<aside> 📌 JPQL 특징 SELECT, UPDATE,DELETE 등의 키워드 사용은 SQL과 동일 INSERT는 persist() 메소드를 사용 키워드는 대소문자를 구분하지 않지만, 속성은 대소문자를 구분하므로 유의 엔티티 별칭은 필수는 아니지만 사용하는 것을 권고함
</aside>
작성한 jpql(문자열 쿼리)을 entityManager.createQuery()
메소드를 이용해 Query 객체로 생성
쿼리 객체는 TypedQuery
와 Query
두 가지가 있음
TypedQuery
: 반환할 타입을 명확하게 지칭하는 방식일 때 사용하며 쿼리 객체의 메소드 실행결과로 지정한 타입이 반환된다.Query
: 반환할 타입을 명확하게 지정할 수 없을 때 사용하며 쿼리 객체 메소드의 실행 결과로 Object 또는 Objectp[ ]이 반환된다.쿼리 객체에서 제공하는 메소드를 호출해서 쿼리를 실행하고 데이터베이스를 조회한다.
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);
}
다중행 다중열 조회 테스트