Spring Data JPA
🧩 Spring Data JPA
정의
Spring Data JPA는 JPA를 더 편하게 사용할 수 있도록 Repository 추상화와 편의 기능을 제공하는 Spring 모듈이다. 반복적인 CRUD 코드와 쿼리 생성을 줄여준다.
JPA의 공통 기능을 인터페이스 중심으로 제공해서 데이터 접근 코드를 간결하게 만들 수 있다.
🧩 역할
- Repository 추상화를 제공한다
- CRUD 작업을 간단하게 만든다
- 메서드 이름 기반 쿼리를 지원한다
@Query,@Modifying,@EnableJpaRepositories같은 기능과 함께 사용된다- Custom Repository 확장을 지원한다
🛠 핵심 메서드
| 메서드 | 기능 |
|---|---|
save(S entity) |
엔티티를 저장하거나 수정한다 |
findById(ID id) |
식별자로 조회한다 |
findAll() |
전체 조회한다 |
count() |
전체 개수를 조회한다 |
delete(T entity) |
엔티티를 삭제한다 |
existsById(ID id) |
존재 여부를 확인한다 |
🛠 주요 기능
메서드 이름으로 쿼리 생성
메서드 이름만으로도 일부 JPQL을 자동 생성할 수 있다.
예시:
findDistinctByLastnameAndFirstnamefindByAgeLessThanfindByFirstnameContainingfindByActiveTrue
@Query 사용
@Query("SELECT u FROM User u WHERE u.status = 'ACTIVE'")
List<User> findActiveUsers();
Custom Repository 확장
public interface UserRepository extends JpaRepository<User, Long>, CustomUserRepository {
}
🛠 프로젝트 설정
@Configuration
@EnableJpaRepositories(basePackages = "<패키지명>.api.repository")
@EnableJpaAuditing
@EnableTransactionManagement
public class JpaConfiguration {
@Bean
public DataSource dataSourceForJPA() {
return DataSourceInitializer.getDataSource(dataSourceType, jndiName);
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
@Qualifier("dataSourceForJPA") DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("org.infinity.server.entity");
em.setPersistenceProviderClass(HibernatePersistenceProvider.class);
return em;
}
@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
return jpaTransactionManager;
}
}
⚠️ 주의사항
- 엔티티가 스캔 대상 패키지에 포함되어 있어야 한다.
- 메서드 이름 기반 쿼리는 편리하지만 복잡한 조건에는 한계가 있다.
@Query와Custom Repository를 적절히 나눠 쓰는 것이 좋다.- 트랜잭션과 엔티티 스캔 설정이 맞지 않으면 Repository 동작이 깨질 수 있다.
📌 정리
Spring Data JPA는 JPA 사용을 편하게 해주는 Spring 모듈이다.- Repository 추상화, 메서드 이름 기반 쿼리,
@Query, Custom Repository 확장을 제공한다. - JPA 기반 프로젝트에서 데이터 접근 코드를 줄이고 유지보수를 쉽게 만든다.
댓글남기기