728x90
주요 기능
스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다.
- 공통 인터페이스 기능
- 쿼리 메서드 기능
공통 인터페이스 기능
JpaRepository Interface 를 통해서 기본적인 CRUD 기능을 제공한다. 공통화 가능한 기능이 거의 모두 포함되어 있다.
<스프링 데이터>
@Indexed
public interface Repository<T, ID> {
}
package org.springframework.data.repository;
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
Optional<T> findById(ID id);
boolean existsById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAllById(Iterable<? extends ID> ids);
void deleteAll(Iterable<? extends T> entities);
void deleteAll();
}
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
<스프링 데이터 JPA>
package org.springframework.data.jpa.repository;
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
@Override
List<T> findAll();
@Override
List<T> findAll(Sort sort);
@Override
List<T> findAllById(Iterable<ID> ids);
@Override
<S extends T> List<S> saveAll(Iterable<S> entities);
void flush();
<S extends T> S saveAndFlush(S entity);
<S extends T> List<S> saveAllAndFlush(Iterable<S> entities);
@Deprecated
default void deleteInBatch(Iterable<T> entities){deleteAllInBatch(entities);}
void deleteAllInBatch(Iterable<T> entities);
void deleteAllByIdInBatch(Iterable<ID> ids);
void deleteAllInBatch();
@Deprecated
T getOne(ID id);
T getById(ID id);
@Override
<S extends T> List<S> findAll(Example<S> example);
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
}
- JpaRepository 사용법
- JpaRepository Interface 를 인터페이스 상속 (extends) 받고, 제네릭에 관리할 <Entity, Entity Id>를 주면 된다.
- 기본 CRUD 기능을 모두 사용할 수 있다.
- 개발자는 구현 클래스없이 인터페이스만 만들면 기본 CRUD 기능을 사용할 수 있다.
- 스프링 Data Jpa 가 Proxy 기술을 사용해서 구현 클래스를 만들어준다. 그리고 만든 구현 클래스의 인스턴스를 만들어서 스프링 빈으로 등록한다.
쿼리 메서드 기능
스프링 데이터 JPA는 인터페이스에 메서드만 적어두면, 메서드 이름을 분석해서 쿼리를 자동으로 만들고 실행해주는 기능을 제공한다.
- 순수 JPA를 사용하면 직접 JPQL을 작성하고, 파라미터도 직접 바인딩해야 한다.
- 스프링 데이터 JPA는 메서드 이름을 분석해서 필요한 JPQL을 만들고 실행해준다. 이때 JPQL을 JPA가 SQL로 번역해서 실행한다.
- 메서드 이름 규칙은 다음과 같다.
스프링 데이터 JPA가 제공하는 쿼리 메서드 기능
1. 조회 : find..By, read..By, query..By, get..By
2. COUNT : count..By -> long
3. EXISTS : exists..By -> boolean
4. 삭제 : delete..By, remove..By -> long
5. DISTINCT : findDistinct, findMemberDistinctBy
6. LIMIT : findFirst3, findFirst, findTop, findTop3
- 쿼리 메서드 기능 대신에 직접 JPQL을 사용하고 싶을 때는 @Query 와 함께 작성하면 된다.
- JPA의 네이티브 쿼리 기능도 지원하므로, JPQL 대신에 SQL을 직접 작성할 수 있다.
설정
- spring-boot-starter-data-jpa 라이브러를 넣어주면 된다.
- 여기에는 JPA, Hibernate, 스프링 데이터 JPA(spring-data-jpa), 스프링 JDBC 관련 기능도 모두 포함되어 있다.
728x90
'Tech > 데이터 접근 기술' 카테고리의 다른 글
트랜잭션 매니저 선택 (0) | 2023.03.07 |
---|---|
실용적인 구조 (0) | 2023.03.07 |
JPA 소개 (0) | 2023.03.05 |
MyBatis 소개 (0) | 2023.03.05 |
스프링 JdbcTemplate 소개 (0) | 2023.03.05 |