JPA를 공부하면서 JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어를 제공한다는 것을 알게 되었다.
JPA은 table 대상인 SQL과 달리 Entity 객체를 중심으로 개발하므로 Entity 대상으로 Query를 작성한다고 한다.
JPQL과 SQL 차이점
- JPQL은 엔티티 객체를 대상으로 쿼리한다.
- SQL은 데이터베이스 테이블을 대상으로 쿼리한다.
그 외 특징들
- 엔티티 객체를 조회하는 객체지향 쿼리
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
- JPA는 JPQL을 분석한 후 적절한 SQL을 만들어 데이터베이스를 조회
- 방언(Dialect)만 변경하면 JPQL을 수정하지 않고 자연스럽게 DB 변경 가능
- JPQL 문법의 전체 구조는 SQL과 유사
아래와 같이 Entity 이름과 Entity 객체의 필드명으로 작성한다.
내가 사용한 Repository의 select문
public List<Item> findAll() {
/*TypedQuery<Item> query = entityManager.createQuery("select i from Item i", Item.class);
List<Item> items = query.getResultList();*/
return entityManager.createQuery("select i from Item i", Item.class)
.getResultList();
}
반환 타입을 알 경우 TypedQuery를 사용할 수 있다. (주석과 return 내용은 같음)
- query.getResultList()
- 결과가 없으면 빈 컬렉션 반환
- query.getSingleResult()
- 결과가 정확히 하나일 때 사용.
- 결과가 없으면 예외 발생 : NoResultException
- 1개보다 많으면 : NonUniqueResultException
- 주의 필요.
더 많은 문법에 대한 설명은 JPA 책 요약 참고
https://ultrakain.gitbooks.io/jpa/content/chapter10/chapter10.2.html
그 외 설명 참고
https://data-make.tistory.com/614
'Web > JPA' 카테고리의 다른 글
[JPA]객체지향 쿼리 (0) | 2021.11.25 |
---|---|
[JPA]Transcation, 영속성Context, EntityManager (0) | 2021.11.23 |
[JPA]JUnit단위 Test 관련 정리 (0) | 2021.11.23 |
[JPA]Annotation 정리 (0) | 2021.11.18 |