Spring에서 사용하는 JpaRepository, CrudRepository 등에는 기본적인 CRUD 관련 메서드가 기본적으로 정의되어 있다. 예를 들어, 조회(검색)의 경우 findById()라는 메서드가 있는데, 내가 엔티티를 조회할 때 Id 뿐만 아니라 다른 것을 이용하고 싶다면 어떻게 할 수 있을까?
해당 메서드를 직접 정의하고 "구현"하지 않더라도, Spring Data JPA 규칙에 맞게 메서드 이름을 정의한다면 내부적으로 이름에 맞게 검색을 해준다.
다음은 Spring Data JPA 공식문서에서 제공하는 네이밍 방법이다.
public interface UserRepository extends JpaRepository<User, Long> {
User findFirst1ByName(String name);
List<User> findFirst2ByName(String name);
User findTop1ByName(String name);
List<User> findTop2ByName(String name);
List<User> findLast2ByName(String name); //잘못된 문법!
}
findLast2ByName(String name)처럼 잘못된 네이밍은 무시되고 findByName(String name)으로 작동한다. 따라서 사용하고 싶은 정렬 방법이 존재하는지 문서를 통해서 확인해야 한다.
public interface UserRepository extends JpaRepository<User, Long> {
User findByCreatedAtAfter(LocalDateTime yesterday);
User findByCreatedAtGreaterThan(LocalDateTime yesterday);
User findByIdAfter(Long id);
User findByIdGreaterThan(Long id);
}
Before, After 등의 사용이 가능하다. 각각 LessThan과 GreaterThan에 대응한다. 해당 문법을 사용하는 경우, 가독성을 위해서 시간과 관련된 것을 사용하기를 권고한다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByActiveTrue();
List<User> findByActiveFalse();
List<User> findByNameIs(String name);
List<User> findByNameEquals(String name);
List<User> findByNameIsNull();
List<User> findByNameIsNotNull();
}
boolean형 필드는 True 혹은 False 검사로 조회할 수 있다.Active가 true이면 반환에 포함하고, false이면 포함하지 않을 것이다.
이외에, Is, Equals를 사용하면 조건문을 만들 수 있다.
isNull, isNotNull 은 매개변수 사용없이 null인지 아닌지를 판단해서 리스트를 리턴한다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByContainingJack(String name);
}
SQL 구문에서 like 를 사용하는 부분을 Containing을 사용하면 된다.
'학습 > DB' 카테고리의 다른 글
객체지향 쿼리 언어 (0) | 2021.09.17 |
---|---|
Oracle DML GRANT, REVOKE 사용하기 (0) | 2021.09.01 |
Spring Data Repository Interface (0) | 2021.08.29 |
SQL select 쿼리 문법 순서 (0) | 2021.08.28 |
CDATA란? (0) | 2021.08.27 |