User 라는 도메인을 만들어 테스트해보겠습니다.
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private int age;
}
Spring data Jpa 는 메소드 이름을 기반으로 JPQL을 생성해주는 기능을 제공하고 있습니다.
기본적인 구조는 find...By, read...By, query...By, count...By, and get...By 입니다. ...에는 Top, First, Top3, First10 과 같은 갯수 제한하는 키워드나 Distinct 같은 키워드가 들어갈 수 있습니다. 그리고 어떤 단어가 들어가도 상관 없습니다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findTop10By();
List<User> findNameAllBy();
}
List<User> findTop10By();
해당 메소드를 호출하면, select 쿼리에 limit 10 이 호출되어 10개까지만 보여줍니다.
SQL 실행 결과
select user0_.id as id1_5_, user0_.age as age2_5_, user0_.name as name3_5_
from user user0_ limit 10;
List<User> findNameBy();
이렇게 호출한다고 해서 select name from user; 이렇게 호출되지 않습니다. 전체 컬럼을 모두 호출합니다. find 다음에 나오는 이름은 원하시는걸로 해도 됩니다.
SQL 실행 결과
select user0_.id as id1_5_, user0_.age as age2_5_, user0_.name as name3_5_
from user user0_;
또한, 쿼리에 조건이 없다고 해서 아래처러 find...By 형식을 지키지 않으면 에러가 날 수 있습니다. 조건이 없더라도 뒤에 By는 반드시 붙여주어야 합니다.
List<User> findNameAll();
위 메소드는 에러가 납니다.
By 다음에 올 수 있는 키워드는 아래에서 확인할 수 있습니다. :D
docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
'개발~ > Spring-Data-JPA' 카테고리의 다른 글
[Spring] 하위 메뉴 구현하기 (0) | 2021.02.09 |
---|