JpaRepository는 인터페이스이며 공통 CRUD를 제공해준다.
@Repository
@RequiredArgsConstructor
public class TeamJpaRepository {
private final EntityManager em;
public Team save(Team team){
em.persist(team);
return team;
}
public void delete(Team team){
em.remove(team);
}
public List<Team> findAll(){
return em.createQuery("select t from Team t", Team.class)
.getResultList();
}
public Optional<Team> findById(Long id){
return Optional.ofNullable(em.find(Team.class, id));
}
public long count(){
return em.createQuery("select count(t) from Team t", Long.class)
.getSingleResult();
}
}
public interface MemberRepository extends JpaRepository<Member, Long> {
}
JpaRespotirory를 사용하면 기존에 직접 구현 했던 코드를 더 이상 구현할 필요가 없어진다.
public interface JpaRepository<T, ID extends Serializable>
extends PagingAndSortingRepository<T, ID>
{
...
}
JpaRepository<Member, Long>
T findOne(ID)
-> Optional<T> findById(ID)
변경boolean exists(ID)
-> boolean existsById(ID)
변경T
: 엔티티ID
: 엔티티의 식별자 타입S
: 엔티티의 그 자식 타입save(S)
: 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다.delete(T)
: 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove()
호출findById(ID)
: 엔티티 하나를 조회한다. 내부에서 EntityManager.find()
호출getOne(ID)
: 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference()
호출findAll(...)
: 모든 엔티티를 조회한다. 정렬(Sort)
이나 페이징(Pageable)
조건을 파라미터로 제공할 수 있다.