[Spring Data JPA] @Query

2023. 10. 14. 10:04·Web & Android/Spring Data JPA

@Query

  • @Query 어노테이션을 사용해 Custom으로 쿼리문을 지정할 수 있다.
public interface MemberRepository extends JpaRepository<Member, Long> {
	@Query("select m.username from Member m")
	List<String> findUsernameList();
}
  • SQL과 유사한 JPQL이라는 객체지향 쿼리 언어를 통해 복잡한 쿼리도 처리 가능
  • JPQL
    • 엔티티 객체를 대상으로 쿼리를 수행하는 객체지향 쿼리
    • SQL을 추상화해서 사용하기 때문에 특정 데이터베이스 SQL에 의존하지 않음
import com.shop.entity.Item;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ItemRepository extends JpaRepository<Item, Long> {
		
		// select 뒤에 i는 변수를 나타냄, %:itemDetail% -> :표시는 변수라는 것을 나타냄
		@Query("select i from Item i where i.itemDetail like %:itemDetail%"
						+ "order by i.price desc") // 엔티티 이름과 동일하기 써야함, i를 무조건 작성
		List<Item> findByItemDetail(@Param("itemDetail")String itemDetail);

}

@Query-nativeQuery

  • 기존 쿼리를 그대로 활용
  • 특정 데이터베이스에 종속되는 쿼리문을 사용하기 때문에 데이터베이스에 대해 독립적이라는 장점을 잃어버림
  • 기존에 작성한 통계용 쿼리처럼 복잡한 쿼리를 그대로 사용해야 하는 경우 활용 가능

→ value = select 뒤에 * 표시, nativeQuery = true 추가

→ JPQL과 다른 점

i를 *로, itemDetail를 item_detail로 변경

@Query(value = "select * from item i where i.item_Detail like %:itemDetail% order by i.price desc", nativeQuery = true) // 엔티티 이름과 동일하기 써야함, i를 무조건 작성
    List<Item> findByItemDetailNative(@Param("itemDetail")String itemDetail);

차이점

  • JPQL은 엔티티를 대상으로 하고, Native는 데이터베이스를 대상으로 함
저작자표시 비영리 변경금지 (새창열림)

'Web & Android > Spring Data JPA' 카테고리의 다른 글

[Spring Data JPA] 연관 관계 매핑  (0) 2023.10.15
[Spring Data JPA] Querydsl  (1) 2023.10.15
[Spring Data JPA] JPA  (0) 2023.10.14
[Spring Data JPA] QueryMethod  (0) 2023.10.14
[Spring Data JPA] 영속성 컨텍스트  (1) 2023.10.14
'Web & Android/Spring Data JPA' 카테고리의 다른 글
  • [Spring Data JPA] 연관 관계 매핑
  • [Spring Data JPA] Querydsl
  • [Spring Data JPA] JPA
  • [Spring Data JPA] QueryMethod
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    DB
    리눅스마스터
    프로그래머스
    python
    baekjoon
    스프링 부트 쇼핑몰 프로젝트 with JPA
    backjoon
    리눅스마스터 1급
    spring
    Spring Security
    CS
    리눅스
    시큐리티
    pcce 기출문제
    백준
    JPA
    데이터
    Flutter
    스프링부트
    스프링
    자바
    CS지식
    postgresql
    플러터
    Oracle
    programmers
    Java
    데이터베이스
    Linux
    springboot
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[Spring Data JPA] @Query
상단으로

티스토리툴바