JPA에서 JPARepository는 기본적인 CRUD 작업을 포함한 다양한 데이터 접근 기능을 제공하는 인터페이스입니다.
JPARepository의 구조
public interface JPARepository<T, ID> extends PagingAndSortingRepository<T, ID> {
// additional custom methods can be defined here (추가적인 커스텀 메서드는 직접 작성)
}
제네릭 타입
JPARepository는 두 개의 제네릭 타입 매개변수를 받습니다:
T
: 엔티티 클래스의 타입입니다. 이 리포지토리가 처리할 도메인 타입을 지정합니다.
ID
: 엔티티의 식별자(ID)의 타입입니다. 보통 Long, String, UUID 등이 사용됩니다.
예시: User 엔티티
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
// interface입니다.
public interface UserRepository extends JPARepository<User, Long> {
// name으로 user 찾는 메서드는 내가 직접 작성
List<User> findByName(String name);
}
- JPARepository 활용 시 JPARepository를 구현하는 리포지토리와 그렇지 않은 일반 리포지토리 2개를 생성하는 편입니다.
JPARepository에 구현되어 있는 메서드
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID> {
// 저장 및 업데이트
<S extends T> S save(S entity);
// 여러 엔티티 저장
<S extends T> List<S> saveAll(Iterable<S> entities);
// 하나의 엔티티 조회
Optional<T> findById(ID id);
// 모든 엔티티 조회
List<T> findAll();
// 페이징과 정렬 적용하여 모든 엔티티 조회
Page<T> findAll(Pageable pageable);
// 정렬 적용하여 모든 엔티티 조회
List<T> findAll(Sort sort);
// 여러 엔티티 삭제
void deleteAll(Iterable<? extends T> entities);
// 하나의 엔티티 삭제
void delete(T entity);
// ID를 통해 엔티티 존재 여부 확인
boolean existsById(ID id);
// 전체 엔티티 개수 조회
long count();
}
Share article