본문 바로가기

Spring/JPA

Spring JPA - 쿼리 방법

 

1. 리포지토리 인터페이스 선언

 

// 1. Repository 또는 하위 interface 중 하나를 확장하는 interface 선언, 처리해야하는 <도메인 클래스 명, ID유형(타입)>
interface PersonRepository extends Repository<Person, Long> {

  List<Person> findByLastname(String lastname); // 2. interface에서 쿼리 메서드 선언
  
}

 

 

2. 인터페이스 접근 인스턴스를 생성하기 위한 Spring 설정: JavaConfig 또는 XML 구성

 

// Java 구성: 아래와 유사한 클래스 만들기
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@EnableJpaRepositories // 어노테이션을 달아서 패키지를 스캔하기 위한 설정, 내가 사용하는 저장소에 맞추어야 함 @Enable${store}Repositories 
class Config { … }
// XML을 통해 Spring data 저장소 활성화

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
     https://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/data/jpa
     https://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

   <jpa:repositories base-package="com.acme.repositories"/> // Repository(또는 Repository를 상속받은 하위 인터페이스)가 repositories 패키지를 스캔하도록 설정 

</beans>

 

3.  Repository 인스턴스를 주입하여 사용

 

class SomeClient {
 
  private final PersonRepository repository; // repository 인스턴스를 주입하여 사용

  SomeClient(PersonRepository repository) {
    this.repository = repository;
  }

  void doSomething() {
    List<Person> persons = repository.findByLastname("Matthews"); // 쿼리 사용
  }
}

 

 

레퍼런스

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io