일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- JVM
- 소프트웨어공학
- 코틀린
- chatGPT's answer
- 리눅스
- kotlin
- 유닉스
- flet
- 자바네트워크
- Database
- 인프라
- oracle
- lombok
- NIO
- Spring boot
- write by GPT-4
- GPT-4's answer
- 자바
- 시스템
- python
- android
- write by chatGPT
- GIT
- 웹 크롤링
- 고전역학
- 역학
- 파이썬
- 자바암호
- 뉴턴역학
- Today
- Total
Akashic Records
Spring Data JPA @Query 어노테이션 본문
@Query 어노테이션은 Spring Data JPA에서 사용자 정의 쿼리를 작성하는데 사용됩니다. @Query 어노테이션을 사용하면 레포지토리 메서드에 JPQL(Java Persistence Query Language) 또는 네이티브 SQL 쿼리를 지정하여 복잡한 조회 쿼리를 작성할 수 있습니다. 이렇게 하면 기본 제공되는 메서드 이름 기반의 쿼리를 사용할 수 없는 경우에도 데이터를 조회할 수 있습니다.
예제를 통해 자세히 살펴보겠습니다.
엔티티 클래스:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private String email;
// 생략: 생성자, getter, setter
}
레포지토리 인터페이스:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.email = ?1")
User findByEmail(String email);
@Query(value = "SELECT * FROM users u WHERE u.last_name = :lastName", nativeQuery = true)
List<User> findByLastNameWithNativeQuery(@Param("lastName") String lastName);
}
위의 UserRepository 인터페이스에서 findByEmail 메서드는 JPQL 쿼리를 사용하며, 이메일을 기준으로 사용자를 조회합니다. ?1은 첫 번째 매개변수인 email을 나타냅니다.
findByLastNameWithNativeQuery 메서드는 네이티브 SQL 쿼리를 사용합니다. 이 경우, nativeQuery = true 속성을 추가하여 네이티브 쿼리임을 명시해야 합니다. :lastName은 @Param 어노테이션을 사용하여 메서드 매개변수와 연결됩니다.
이렇게 @Query 어노테이션을 사용하여 사용자 정의 쿼리를 작성할 수 있으며, JPQL 또는 네이티브 SQL 쿼리를 이용하여 복잡한 데이터 조회 작업을 수행할 수 있습니다.
@Query 어노테이션을 사용하여 수정 작업(INSERT, UPDATE, DELETE)을 수행하는 메서드를 작성할 수도 있습니다. 이 경우, @Modifying 어노테이션을 추가하여 해당 메서드가 수정 작업을 수행함을 명시해야 합니다.
예제를 통해 설명하겠습니다.
엔티티 클래스는 이전 예제와 동일하게 User 클래스를 사용합니다.
레포지토리 인터페이스:
public interface UserRepository extends JpaRepository<User, Long> {
@Modifying
@Query("UPDATE User u SET u.email = :newEmail WHERE u.id = :id")
int updateUserEmail(@Param("id") Long id, @Param("newEmail") String newEmail);
@Modifying
@Query(value = "DELETE FROM users WHERE email = :email", nativeQuery = true)
int deleteUserByEmailWithNativeQuery(@Param("email") String email);
}
updateUserEmail 메서드는 JPQL 쿼리를 사용하여 사용자 이메일을 업데이트합니다. @Modifying 어노테이션을 추가하여 해당 메서드가 수정 작업을 수행함을 명시합니다. :id와 :newEmail은 각각 @Param 어노테이션을 사용하여 메서드 매개변수와 연결됩니다.
deleteUserByEmailWithNativeQuery 메서드는 네이티브 SQL 쿼리를 사용하여 이메일을 기준으로 사용자를 삭제합니다. nativeQuery = true 속성과 함께 @Modifying 어노테이션을 추가하여 해당 메서드가 수정 작업을 수행함을 명시합니다. :email은 @Param 어노테이션을 사용하여 메서드 매개변수와 연결됩니다.
@Query와 @Modifying 어노테이션을 사용하여 사용자 정의 쿼리를 작성하고, 조회, 수정 작업을 수행할 수 있습니다. 이를 통해 Spring Data JPA를 사용하여 복잡한 데이터 처리 작업을 손쉽게 구현할 수 있습니다.
'Spring.io' 카테고리의 다른 글
Spring Data JPA, @OneToMany 무한 반복 오류 (0) | 2023.04.12 |
---|---|
Spring Data JPA, 페이지 및 정렬 (0) | 2023.04.10 |
Spring Data JPA (0) | 2023.04.10 |
Spring Data JPA에서 findBy.. 규칙 (0) | 2023.04.10 |
Spring Security, SecurityContextHolder 사용법 (0) | 2023.04.10 |