개발천재

[Spring Boot] JPQL로 이해하는 데이터베이스 접근 방식 본문

개발 준비/Spring Boot

[Spring Boot] JPQL로 이해하는 데이터베이스 접근 방식

세리블리 2025. 2. 27. 23:37
반응형

JPQL 이해하기

JPQL(Java Persistence Query Language)은 JPA에서 엔티티 객체를 조회하기 위한 쿼리 언어이다. SQL과 비슷하지만, 테이블이 아니라 "엔티티"를 대상으로 쿼리를 작성한다.

 

쉽게 말하면 JPQL은 JPA에서 SQL처럼 데이터를 조회하는 방법이고, DB 테이블이 아니라 엔티티(Member, Order, Product 등)를 대상으로 검색한다. JPQL을 실행하면 SQL로 변환되어 DB에서 실행된다.

 

JPQL을 사용하면 객체 중심으로 쿼리를 작성할 수 있어서 유지보수가 쉽고, 데이터베이스에 따라 SQL이 다를 수 있지만, JPQL은 JPA가 자동 변환해준다는 장점이 있다. JPQL을 사용하면 DB 변경 시에도 코드 수정이 적다.

 


 

JPQL 기본 문법

SQL과 비슷하지만, 테이블 이름 대신 엔티티 이름을 사용하는 것이 특징이다.

 

전체 데이터 조회 (SELECT), 모든 회원 조회하기

JPQL

member 테이블을 직접 조회하는 SQL과 달리, JPQL에서는 Member 엔티티를 조회한다.

String jpql = "SELECT m FROM Member m";
List<Member> members = em.createQuery(jpql, Member.class).getResultList();

 

SQL

SELECT * FROM member;

 

 

 

조건 검색 (WHERE), 이름이 '유진'인 회원 찾기

JPQL

SQL과 유사하지만, m.name처럼 객체의 필드를 기준으로 조건을 설정합니다.

String jpql = "SELECT m FROM Member m WHERE m.name = :name";
Member member = em.createQuery(jpql, Member.class)
                  .setParameter("name", "유진")
                  .getSingleResult();

 

SQL

SELECT * FROM member WHERE name = '유진';

 

 

 

정렬 (ORDER BY), 회원 목록을 이름순으로 정렬하기

JPQL

ORDER BY도 동일하게 사용되지만, 엔티티의 필드 기준으로 정렬한다.

String jpql = "SELECT m FROM Member m ORDER BY m.name ASC";
List<Member> members = em.createQuery(jpql, Member.class).getResultList();

 

SQL

SELECT * FROM member ORDER BY name ASC;

 

 

 

LIKE 검색 (부분 검색), 이름에 '김'이 들어가는 회원 찾기

JPQL

LIKE 문법도 SQL과 동일하지만, 엔티티 필드를 기준으로 검색한다.

String jpql = "SELECT m FROM Member m WHERE m.name LIKE '%김%'";
List<Member> members = em.createQuery(jpql, Member.class).getResultList();

 

SQL과 비교하면?

SELECT * FROM member WHERE name LIKE '%김%';

 

 

 

JOIN 사용, 회원과 그 회원이 속한 팀 정보를 함께 가져오기

JPQL

SQL에서는 JOIN을 테이블 기준으로 하지만, JPQL에서는 객체(엔티티) 기준으로 JOIN을 수행한다.

String jpql = "SELECT m FROM Member m JOIN m.team t WHERE t.name = :teamName";
List<Member> members = em.createQuery(jpql, Member.class)
                         .setParameter("teamName", "아이브")
                         .getResultList();

 

SQL

SELECT m.* FROM member m
JOIN team t ON m.team_id = t.id
WHERE t.name = '아이브';

 

반응형