더 많은 메서드가 필요하다면 스프링 데이터 리포지터리 인터페이스(repository interface)와 기본 명명 규칙을 사용해서 추가 메서드를 구현할 수 있다. 스프링은 시작할 때 리포지터리 인터페이스의 메서드 이름을 구문 분석(parse)하고 메서드 이름을 기반으로 SQL 문으로 변환한 후 내부적으로 작업을 수행할 동적 프록시 클래스를 생성한다. 라이선싱 서비스의 Repository는 다음 코드에서 볼 수 있다.
코드 5-9 쿼리 메서드가 정의된 LicenseRepository 인터페이스
package com.optimagrowth.license.repository;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.optimagrowth.license.model.License;
@Repository ➊
public interface LicenseRepository extends CrudRepository<License,String> { ➋
public List<License> findByOrganizationId(String organizationId); ➌
public License findByOrganizationIdAndLicenseId
(String organizationId, String licenseId);
}
➊ JPA 리포지터리 인터페이스라고 스프링 부트에 알린다. CrudRepository를 확장한다면 이 애너테이션은 선택적(optional)이다.
➋ 스프링 CrudRepository를 확장한다.
➌ 쿼리 메서드를 ‘SELECT ... FROM’ 쿼리로 구문 분석한다.