스프링 데이터 적용하려면,
public interface MemberRepository extends JpaRepository<Member, Long> {
}
JpaRepository<엔티티, ID타입>을 상속받아 인터페이스를 구현하면 된다.
@NoRepositoryBean
public interface JpaRepository<T, ID> extends ListCrudRepository<T, ID>, ListPagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
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);
@Deprecated
T getById(ID id);
T getReferenceById(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 인터페이스인데,
보면 뭐 save, findAll 등, 그리고 쟤가 또 상속 받은 걸 타고 내려가다 보면 CrudRepository 라는 걸 상속 받았는데,
@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();
}
보면 이런 게 다 미리 만들어져 있다.
그래서, 따로 우리가 구현을 하지 않아도, 스프링 부트가 저런 걸 알아서 구현해서 빈으로 등록시켜 놓는다.
또 놀라운 기능은,
public interface MemberRepository extends JpaRepository<Member, Long> {\
List<Member> findByName(String name);
}
이런 식으로 메소드 이름을 정의해 놓으면,
그 이름을 읽어서 구현해 준다.
정말로 저 문자를 읽어서 구현해 주는 거다. findByName의 경우,
select m from member m where m.name = ?
select * from member where name=:name
이런 식 일거다.
findBy, name을 읽고 저렇게 만든 것이다.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.core-concepts
이걸 보면 Spring Data JPA의 Core concept에 대해 알 수 있다.
스프링 데이터 JPA는 결국 JPA를 간단하게 다루는 것이기 때문에, JPA를 잘 알고 이용해야 한다.
보통, 스프링 하면
Spring, JPA, SpringDataJPA, QueryDSL
이렇게 4가지를 같이 쓴다.
여기서 더 추가가 될 건 JdbcTemplate같은 정말 가끔 부득이 하게 네이티브 SQL을 다루는 정도?
'스프링데이터 + JPA > 스프링 데이터 JPA' 카테고리의 다른 글
5. 순수 JPA 리포지토리 (0) | 2023.11.18 |
---|---|
4. 예제 도메인 모델 구현 (0) | 2023.11.18 |
3. 스프링 데이터 JPA, DB 설정, 동작 확인 (0) | 2023.11.18 |
2. 프로젝트 생성 (0) | 2023.11.18 |
1. 스프링 데이터 JPA (0) | 2023.11.18 |