JPA 또는 hibernate를 이용하여 DB에서 데이터를 가져오는 방법.
Java Persistent Query Language(Hibernate Query Language)의 약자이다.
SQL과 비슷하지만, 데이터베이스 테이블 기준이 아니라, 엔티티 모델 기준이라는 점에서 큰 차이가 있다.
TypedQuery<'엔티티이름'> query = entityManager.createQuery("SELECT p FROM '엔티티이름' As p", '엔티티이름'.class); List<'엔티티이름'> posts = query.getResultList(); posts.forEach(System.out::println); // 출력해보는 법
이렇게 작성된 JPQL은 데이터베이스에 독립적이어서, 이 JPQL이 각 DB에 맞는 SQL로 변환되어 실행된다.
JPQL의 단점은 타입세이프하지 않다는 것이다.(문자열이기 때문에 오타 발생 가능)
타입 세이프한 쿼리를 만들 수 있는 방법.
CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<'엔티티이름'> query = builder.createQuery('엔티티이름'.class); Root<'엔티티이름'> root = query.from('엔티티이름'.class); query.select(root); List<'엔티티이름'> posts = entityManager.createQuery(query).getResultList();
SQL 쿼리 사용
List<'엔티티이름'> posts = entityManager.createNativeQuery("SELECT * FROM '테이블'", '엔티티이름'.class).getResultList();