[Spring Boot] JpaRepository

조애옹·2025년 6월 17일

🔍 JpaRepository란?

  • JPA에서 데이터 접근 계층(DAO)을 추상화한 인터페이스
  • 기본적인 CRUD 기능을 구현 없이 제공
  • @Repository 어노테이션 없이도 자동으로 Spring Bean 등록됨

✅ 기본 사용법

public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByName(String name); // 커스텀 쿼리도 작성 가능
}
  • <Entity, ID> 제네릭 타입 지정
  • findAll(), findById(id), save(entity), delete(entity), count() 등 메서드 기본 제공

✅ 쿼리 메서드 (Query Method)

List<Member> findByAgeGreaterThan(int age);
Member findTop1ByNameOrderByIdDesc(String name);
  • 메서드 이름만으로 자동 쿼리 생성
  • JPA가 파싱하여 JPQL 생성
키워드의미
findBy, readBy, getBy조회
And, Or조건 연결
Between, LessThan, GreaterThan범위 조건
Like, Containing, StartsWith문자열 검색
OrderBy정렬

✅ @Query로 직접 JPQL 작성

@Query("SELECT m FROM Member m WHERE m.age >= :age")
List<Member> findCustomQuery(@Param("age") int age);
  • 복잡한 조건, 조인 등은 직접 JPQL 작성
  • 네이티브 쿼리도 가능
@Query(value = "SELECT * FROM member WHERE age >= :age", nativeQuery = true)
List<Member> findNative(@Param("age") int age);

✅ 실무에서 유용한 확장 기능

페이징

Page<Member> findByAgeGreaterThan(int age, Pageable pageable);

Boolean 반환

boolean existsByEmail(String email);

개수 조회

long countByAge(int age);

✅ 사용자 정의 Repository

1. 사용자 정의 인터페이스

public interface MemberRepositoryCustom {
    List<Member> search(String keyword);
}

2. 구현체 클래스

public class MemberRepositoryImpl implements MemberRepositoryCustom {
    @PersistenceContext
    private EntityManager em;

    @Override
    public List<Member> search(String keyword) {
        return em.createQuery("SELECT m FROM Member m WHERE m.name LIKE :kw", Member.class)
                 .setParameter("kw", "%" + keyword + "%")
                 .getResultList();
    }
}

3. 메인 Repository에 상속

public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
}
profile
아자잣

0개의 댓글