Whiteship Spring JPA, common repository
스프링 데이터는 여러 프로젝트의 묶음.
- common
- rest
- JPA
- jdbc
- keyValue
- mongoDB
- Redis
- …
스프링 데이터 Common, Repository
package org.springframework.data.jpa.repository;
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor
package org.springframework.data.repository; public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> @NorepositoryBean //Repository 를 상속받았기 때문에 Spring 이 bean 을 만들지 않도록 알려줌 public interface CrudRepository<T, ID> extends Repository<T, ID> public interface Repository<T, ID> //마커용
JpaRepository
를 상속받은 interface 를 만들면, 기본적으로 findAll, findById, save, paging 등의 기본적인 기능들이 포함된 상태로 구현된다.
//기본적인 방법
public interface PostRepository extends JpaRepository<Post, Long> {
}
@RepositoryDefinition
를 사용해서 기능이 없는 Repository 를 만들고 원하는 기능만 넣는 방법이 있다. spring-data-jpa 가 구현할 수 있는 메소드라면 가능하다.
@RepositoryDefinition(domainClass = Post.class, idClass = Long.class)
public interface CustomPostRepositoryWithRepositoryDefinition {
Post save(Post post);
List<Post> findAll();
}
공통적인 함수를 모아놓고 싶다면, 공통 Repository 를 만들고 상속받아 사용하는 방법도 있다.
@NoRepositoryBean
public interface CommonPostRespository<T, ID extends Serializable> extends Repository<T, ID> {
<E extends T> E save(T t);
List<T> findAll();
}
public interface CustomPostRepositoryWithCommonPostRepository extends CommonPostRespository<Post, Long> {
}