[java] 자바 ORM에서의 쿼리 작성 방법

이 블로그 게시물에서는 자바에서 ORM(Object-Relational Mapping)을 사용하는 경우 쿼리를 작성하는 방법에 대해 살펴 보겠습니다. ORM은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환성을 제공해주는 프레임워크입니다. 대표적인 자바 ORM 프레임워크로는 Hibernate, JPA 등이 있습니다.

JPQL(Java Persistence Query Language) 사용

JPQL은 JPA에서 사용되는 쿼리 언어로, 데이터베이스 테이블이 아닌 엔티티 객체를 기반으로 쿼리를 작성할 수 있습니다. JPQL은 SQL과 유사하지만, 엔티티와 속성을 기반으로 쿼리를 작성한다는 점에서 차이가 있습니다.

다음은 JPQL을 사용하여 간단한 쿼리를 작성하는 예시입니다.

Query query = em.createQuery("SELECT e FROM Employee e WHERE e.department = :dept");
query.setParameter("dept", department);
List<Employee> resultList = query.getResultList();

위 예시에서 emEntityManager 객체이고, Employee는 엔티티 클래스입니다. :dept는 매개변수를 나타내며, query.setParameter()를 통해 값을 바인딩할 수 있습니다.

Criteria API 활용

Criteria API는 프로그래밍 방식으로 동적 쿼리를 작성할 수 있는 방법을 제공합니다. 객체 지향적인 쿼리 작성이 가능하며, 오타나 문법 오류를 컴파일 시간에 잡아낼 수 있는 장점이 있습니다.

다음은 Criteria API를 사용하여 쿼리를 작성하는 예시입니다.

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
Root<Employee> employee = cq.from(Employee.class);
cq.select(employee).where(cb.equal(employee.get("department"), department));
List<Employee> resultList = em.createQuery(cq).getResultList();

위 예시에서 em은 EntityManager 객체이고, Employee는 엔티티 클래스입니다. Criteria API를 사용하면 동적으로 쿼리를 작성할 수 있으며, 복잡한 조인이나 서브쿼리도 처리할 수 있습니다.

기타 방법

자바 ORM을 사용하는 경우에는 위에서 언급한 JPQL과 Criteria API 이외에도 네이티브 쿼리(SQL 쿼리)를 사용할 수 있습니다. 하지만 네이티브 쿼리는 데이터베이스 종속적이기 때문에 사용에 주의해야 합니다.

또한, Hibernate와 같은 ORM 프레임워크는 Criteria APIJPQL 외에도 Criteria API의 간단한 버전으로 사용할 수 있는 Query by Example과 같은 방법을 제공하기도 합니다.

마무리

이번 포스트에서는 자바 ORM에서의 쿼리 작성 방법에 대해 간략하게 알아보았습니다. ORM을 사용함으로써 보다 객체 지향적이고 유지보수성이 높은 쿼리 작성이 가능해졌으며, 다양한 방법을 통해 효율적으로 쿼리를 작성할 수 있게 되었습니다.

자세한 내용은 관련 문서나 튜토리얼을 참고하시기 바랍니다.

참고 자료

  1. JPA Query Language (JPQL)
  2. The Java EE 6 Tutorial - Chapter 3 - Java Persistence Query Language
  3. Hibernate EntityManager 5.4.24.Final User Guide - Chapter 3 - JPQL