티스토리 뷰
이 글은 우리FISA 클라우드 서비스 개발자 굿프렌즈팀 `Been`이 작성했습니다.
JPQL이란?
- JPQL은 Java Persistence Query Language의 약어로, 엔티티 객체를 조회하는 객체지향 쿼리입니다.
- JPA에서 제공하는 메소드 호출만으로 섬세한 쿼리 작성이 어렵다는 문제 해결을 위해 탄생하였습니다.
JPQL 특징
- 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리합니다.
- SQL과 비슷한 문법을 가지며, 결국 SQL로 변환됩니다.
- JPA는 JPQL을 분석하여 SQL을 생성한 후 DB에서 조회합니다.
기본 문법
//검색
String jpql= "select m From Member m where m.name like '%hello%'";
List<Member> result = em.createQuery(jpql, Member.class).getResultList();
- 엔티티와 속성은 대소문자를 구분합니다.(키워드는 x)
- 클래스 이름이 아닌 엔티티 이름을 사용하는데, @Entity(name = “이름”) 으로 지정해주지 않은 경우는 기본 값으로 클래스 이름이 사용됩니다.
- 별칭 반드시 명시해야하며, AS는 생략이 가능합니다.
이번 프로젝트에서 JPQL을 활용한 방법에 대해 설명드리겠습니다.
@Query
- @Query 어노테이션은 JPQL을 작성하기 위한 방법 중 하나로, 엔티티의 JpaRepository를 상속받는 인터페이스에 정의합니다.
- FROM 구문에 엔티티 객체를 선언하여 해당 객체의 속성명을 통해 조건과 파라미터를 작성합니다.
- 파라미터 바인딩을 위해 @Param과 : 을 이용합니다.
- 아래 코드를 확인해보시면 @Param과 : 을 이용하여 productId를 바인딩한 것을 확인하실 수 있습니다.
public interface ProductImageRepository extends JpaRepository<ProductImage, Long> {
@Query("select pi.imageUrl from ProductImage pi where pi.product.id = :productId")
List<String> findAllImageUrlByProductId(@Param("productId") Long productId);
}
JPQL - Limit절 사용 불가
JPQL은 Limit 절을 사용할 수 없습니다.
따라서 이를 보완하기 위해 이번 프로젝트에 적용한 방법을 설명드리겠습니다.
nativeQuery
- @Query의 속성으로, nativeQuery = true를 추가하면 value에 jpql이 아닌 sql 쿼리문을 사용할 수 있습니다.
- 이 속성을 이용하여 limit절을 사용할 수 있었습니다.
public interface ProductImageRepository extends JpaRepository<ProductImage, Long> {
@Query(value = "select pi.image_url from profile_images pi where pi.product_id = :productId limit 1",
nativeQuery = true)
String findOneImageUrlByProductId(@Param("productId") Long productId);
}
참고자료
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- docker
- 개발
- goodfriends
- SMS
- JPQL
- 팀프로젝트
- 네이버클라우드플랫폼
- agile
- ci/cd
- 굿프렌즈
- SMS인증
- Jenkins
- 파이프라인
- git-flow
- 백엔드
- 굿프랜즈
- frontend
- @Query
- Scrum
- 우리FISA
- nativeQuery
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함