JPQL이란?
: JPA에서 객체를 조회하는 언어
: 자바 영속성 API의 일부로 정의된 플랫폼 독립적인 객체지향 쿼리 언어
: 관계형 DB의 엔티티에 대한 쿼리를 만드는데 사용
* 공식문서 : https://djunnni.gitbook.io/springboot/2019-09-05
* 참고링크 : https://wjjeong.tistory.com/15
* 참고링크 : https://velog.io/@peanut_/JPQL-%EC%A1%B0%EC%9D%B8
애네터이션 및 기본 사용 방법
: JpaRepository를 상속받은 repository 인터페이스 안에서 사용
1. @Query
: 만들 메서드 위에 @Query(value = " ") 안에 JPQL문 작성해서 사용
public interface AnswerRepository extends JpaRepository<Answer, Long> {
@Query(value = "SELECT m FROM Answer m WHERE m.id = :answerId")
Optional<Answer> findByAnswer(Long answerId);
}
2. @EntityGraph
: @EntityGraph(attributePaths = 연관된 테이블명 ) 넣어서 사용
: Entity mapping된 테이블 중 attributePaths에 선언된 테이블 정보를 한 번의 select문에서 같이 받아올 수 있음
: @EntityGraph(attributePaths = { 연관된 테이블명1, 연관된 테이블명1 } ) 방식으로 여러개 받아올 수도 있음
public interface AnswerRepository extends JpaRepository<Answer, Long> {
@EntityGraph(attributePaths = {"question", "account"})
Page<Answer> findAllByOrderByCreatedAtDesc(Pageable pageable);
기본 문법
SELECT : 변수를 정하는 곳
FROM : 객체 정해서 변수로 지정하는 곳
WHEHE : 조건 정하는 곳
JOIN : 둘 이상의 테이블에 존재하는 공통 속성의 값이 같은 것을 결과로 추출
ON : 조인 대상 필터링
즉, FROM문에 객체명 넣고 m으로 변수설정 > SELECT문에 변수 m 지정 > WHERE문에서 m안의 조건 정함
> =: 조건에 해당하는 파라미터 값
이때, 조건은 해당 객체의 필드명으로 적어야 한다 [@Column(name = "")으로 지정한 이름아님]
예시
1. 답변객체들 중에서, 답변 안에 연결된 계정객체에 들어가서, 계정객체 아이디가 accountId랑 맞는 것만 pageable조회
public interface AnswerRepository extends JpaRepository<Answer, Long> {
@Query(value = "SELECT m FROM Answer m WHERE m.account.id = :accountId")
Page<Answer> findAllByAccountId(Long accountId, Pageable pageable);
}
2. 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인
SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A'
자주쓰는 JPQL 문
1. 정렬조건
// 정렬 조건 변경시 Order by 조건 Asc/Desc
@Query(value = "select answer from Answer answer Order by answer.createdAt desc")
@Query(value = "select answer from Answer answer where answer.question.id = :questionId order by answer.createdAt desc")
참고링크 : https://www.objectdb.com/java/jpa/query/jpql/order
'Java & Spring > 옵션정리' 카테고리의 다른 글
[메모] 공부할 것 (0) | 2022.11.02 |
---|---|
[SpringBoot] 커스텀 애너테이션 관련 (0) | 2022.11.01 |
[Spring] Entity / Dto 변환 (0) | 2022.10.29 |
[MySQL] 기본 사용법 (0) | 2022.10.24 |
[Spring Boot] P6SPY 프레임 워크 - SQL 확장 (0) | 2022.10.23 |