Spring Data JPA에서는 메서드 이름만으로 SQL 쿼리를 자동으로 만들어줍니다.
규칙에 따라 메서드 이름을 작성하면 JPA가 내부적으로 쿼리를 생성해 실행합니다.
findBy[필드명][조건][And/Or][다른 필드명][조건]
// 엔티티
@Entity
public class Member {
@Id
private Long id;
private String username;
private int age;
}
// 레포지토리 인터페이스
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByUsername(String username);
List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}
findByUsername("sangjun"): username이 'sangjun'인 모든 Member를 조회findByUsernameAndAgeGreaterThan("sangjun", 20): username이 'sangjun'이고 나이가 20 초과인 Member 조회SQL과 유사하지만 엔티티 객체를 대상으로 작성하는 객체 지향 쿼리입니다.
@Query 어노테이션 또는 EntityManager.createQuery()로 실행합니다// JPQL 사용
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("SELECT m FROM Member m WHERE m.username = :username AND m.age >= :age")
List<Member> findCustomQuery(@Param("username") String username, @Param("age") int age);
}
Member는 테이블명이 아니라 엔티티 이름입니다SELECT * FROM member WHERE username = ? AND age >= ? 와 유사한 동작입니다