본문 바로가기

웹개발/Spring

[Spring Data JPA] Query Methods - 메소드 이름으로 쿼리 생성

반응형

스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 중 메소드 이름으로 쿼리 생성에 대해 알아보자. 

 

스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 
  1. 메소드 이름으로 쿼리 생성
  2. 메소드 이름으로 JPA NamedQuery 호출
  3. @Query 어노테이션을 이용한 쿼리 직접 정의

 

메소드 이름으로 쿼리 생성이란?

메소드 이름을 분석해서 JPQL 쿼리 실행하는 것 

 

JPA vs. Spring Data JPA 비교 

순수 JPA

public List<Member> findByUsernameAndAgeGreaterThan(String username, int age) {
	return em.createQuery("select m from Member m where m.username = :username and m.age > :age")
    .setParameter("username", username)
    .setParameter("age", age)
    .getResultList();
}

 

스프링 데이터 JPA

public interface MemberRepository extends JpaRepository<Member, Long> {
	List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}

스프링 데이터 JPA는 알아서 메소드 이름을 분석해서 JPQL을 생성하고 실행해주므로 다음과 같이 간결하게 코드를 줄일 수 있다.

대신 필터 조건에 부합하지 않는 키워드는 사용할 수 없으니 주의해야 한다.

 

 

쿼리 메소드 필터 조건

 

더 자세한 내용은 스프링 데이터 JPA 공식 문서 참고하자. 

 

Spring Data JPA - Reference Documentation

Example 108. 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

 

 

참조 - 자바 ORM 표준 JPA 프로그래밍

반응형

'웹개발 > Spring' 카테고리의 다른 글

OSIV란?  (0) 2020.01.20
[JPA] 연관관계 매핑  (0) 2020.01.20
[JPA] 양방향 연관관계  (0) 2020.01.19
[JPA] 엔티티 매핑 ⭐️ @Entity, @Table, @Column, @Id  (0) 2020.01.17
[JPA] 플러시란? Flush  (0) 2020.01.17