본문 바로가기
개발~/Spring-Data-JPA

[JPA] Method 기반 Query 생성

by 보배곰 2020. 12. 1.

 

docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v

docs.spring.io

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 - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v

docs.spring.io

 

'개발~ > Spring-Data-JPA' 카테고리의 다른 글

[Spring] 하위 메뉴 구현하기  (0) 2021.02.09

댓글