BE/Spring Boot

[Spring Boot] Repository 메서드 생성 규칙 (findAll, findBy)

셰욘 2025. 2. 7. 16:25
728x90

스프링에서는 Repository 메서드 생성 규칙을 사용하면 Jpa에서 자동으로 쿼리를 생성해준다.

 

메서드에 이름을 붙일 때는 첫 단어를 제외한 이후 단어들의 첫 글자를 대문자로 설정해야 JPA에서 정상적으로 인식하고 쿼리를 자동으로 만들어준다.


findAll()

모든 데이터를 조회한다.

findAll() 
// SELECT * FROM 테이블;

 


findBy()

SQL문의 where 절 역할을 수행하는 구문이다.

findBy 뒤에 엔티티의 필드값을 입력해서 사용한다.

// SELECT * FROM 테이블 WHERE id=아이디;
findById(int id)

// SELECT * FROM 테이블 WHERE 변수이름 = 변수값;
findByName(String name)

 


조건 규칙

AND, OR (여러 개)

조건을 여러 개 설정하기 위해 사용한다.

findByNameAndEmail(String name, String email)

 

 

Contains (포함)

Contains : 지정된 텍스트를 포함하는 데이터를 검색한다.

JPA 메서드 규칙을 찾아보면 Containing, Contains, isContaining이 있는데 세 가지 모두 동일한 기능을 수행한다.

like도 동일한 기능을 수행하지만, 매개변수로 %를 같이 넘겨줘야 하기 때문에
자동으로 %를 추가해주는 contains를 사용하는 것이 편리하다....!

 

// SELECT * FROM 테이블 WHERE name LIKE '%keyword%'
findByNameContains(String keyword)

// LIKE는 %까지 포함해서 넘겨줘야 한다.
findByNameLike(String keyword)  // findByNameLike("%kim%");

 

 

StartsWith, EndsWith (시작하는 값, 끝나는 값)

StartsWith : 특정 문자로 시작하는 값을 검색한다.

EndsWith : 특정 문자로 끝나는 값을 검색한다.

 

contains와 마찬가지로 StartingWith, EndingWith와 동일한 기능을 수행하기 때문에
더 짧은 Starts, Ends를 사용하자...!
// SELECT * FROM 테이블 WHERE name LIKE 'keyword%' 
findByNameStartsWith(String keyword)

// SELECT * FROM 테이블 WHERE name LIKE '%keyword'
findByNameEndsWith(String keyword)

 

 

OrderBy (정렬)

OrderBy: 데이터를 정렬할 때 사용한다.

// 나이를 내림차순으로 이름 조회
// SELECT * FROM 테이블 WHERE name = 'keyword' ORDER BY age DESC;
findByNameOrderByAgeDesc(String keyword);

// 가격 순으로 이름 조회
findByNameOrderByPriceAsc(String name)

 

 

 

 

 

 

public interface ProductRepository extends JpaRepository<Product, Long> {
    // 이름으로 상품 조회
    Optional<Product> findByName(String name);
    
    // Description에 키워드가 포함된 상품 조회
    List<Product> findAllByDescriptionContains(String description);
}

 

728x90