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