Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- @Query
- 트랜잭션 락
- 공유락
- springDataJpa
- 스프링 부트
- Service 테스트
- DTO
- Array
- Controller 테스트
- 배열
- 스네이크 케이스
- Repository 테스트
- 스터디
- @Version
- 자료구조
- do...while
- Entity
- 낙관락
- 테스트 코드
- 디자인 패턴
- 원시 자료형
- OOP
- jvm
- Java
- 파스칼 케이스
- 자바
- 비링크
- 마이크로서비스 아키텍처
- 배타락
- 비즈니스 로직
Archives
- Today
- Total
menuhwang
[Spring Boot] JPQL과 @Query 본문
JPQL과 @Query
JPQL
JPQL : JPA Query Language
SQL문법과 거의 비슷하다.
SQL과 차이점은 테이블이나 컬럼의 이름을 사용하는 것이 아니라 엔티티 객체의 이름과 필드 이름을 사용한다는 것이다.
SELECT p FROM Product AS p WHERE p.name = ?1;
SELECT
조회할 컬럼 을 선택.
위 예시처럼 엔티티 별칭을 입력하면 전체 컬럼을 조회한다.
SELECT * FROM product ...
FROM
조회할 엔티티 선택.
AS
조회 조건을 정의.
AS
를 생략하고 SELECT p FROM Product p
라고 작성 가능하다.
WHERE
조회 조건을 정의.
컬럼 = 값
형식으로 작성한다.
@Query
예시 코드
@Query("SELECT p FROM Product AS p WHERE p.category = ?1")
List<Product> findByCategory(String category);
@Query("SELECT p FROM Product p WHERE p.category LIKE %:category%")
List<Product> findByCategory2(@Param("category") String category);
@Query("SELECT p.name, p.category, p.price FROM Product p WHERE p.category LIKE %:category%")
List<Object[]> findByCategory3(@Param("category") String category);
@Query
JPQL을 직접 작성하여 사용한다.
직접 사용하는 데이터베이스의 SQL문을 작성해도 가능하다. 단, 데이터베이스를 변경하게 되면 SQL문도 바꿔야 한다.
@Param
메서드 인자를 쿼리문에 사용하는 방법은 두 가지가 있다.
메서드 인자의 위치를 쿼리문에 넣어주는 방법. @Param 어노테이션을 사용하는 방법.
전자의 경우 파라미터의 순서가 바뀌면 오류가 발생할 가능성이 있다.
따라서, @Param 어노테이션 사용을 권장한다.
'스터디 > Spring' 카테고리의 다른 글
[Spring Boot] 정렬과 페이징 (2) | 2022.10.09 |
---|---|
[Spring Boot] Controller 단위 테스트 (5/5) (1) | 2022.09.08 |
[Spring Boot] Service 단위 테스트 (4/5) (0) | 2022.09.08 |
[Spring Boot] Repository 단위 테스트 (3/5) (1) | 2022.09.08 |
[Spring Boot] TDD(Test-Driven-Development) (2/5) (0) | 2022.09.05 |