성장일기

내가 보려고 정리하는 공부기록

토이프로젝트/1. Ride Together HYU - BE

[프로젝트/BE/JPA] 1. 엔티티, 레포지터리 개발하기 - JPA Query Methods

와나나나 2024. 4. 9. 09:32
728x90

슬슬 프로젝트를 시작했고, 엔티티와 레포지터리, 약간의 서비스 부분을 진행하였다. 첫 프로젝트라 다른 분의 코드를 조금씩 참고하는데, 처음보는 것이 있었다.

 

 

레포지터리를 인터페이스로 작성했는데 구현체가 없었다 !! 이유는 저 JpaRepository에 있었다.

 

JPA Repository<Obj, Long>

JPA Repository는 JPA에서 제공하는 인터페이스 중 하나로, JPA를 사용하여 데이터베이스를 조작하기 위한 메서드들을 제공한다. 기본적으로 findAll(), findById(), save() 등을 제공해 CRUD를 편리하게 조작할 수 있다.

 

이 인터페이스를 기본으로 받고, 추가로 내가 사용할 메서드를 작성해둘 수 있는데, 이때 JPA 쿼리 메소드의 명명규칙대로 메소드의 이름을 지정해주어야 한다.

 

명명방법을 알아보자.

 

findBy, getBy, readBy, queryBy 등 - Select 쿼리

누구를 기준으로 셀렉할지 지정해준다. 

 

위 코드는 파라미터에 넣은 idx와 같은 idx를 가진 Report를 찾아준다. 별도로 구현할 필요는 없고, 저렇게 쓰면 

select r from Report r where r.idx = ?1

 

이 쿼리문과 같은 역할을 하도록 제공해준다.

 

조건에 맞는 모든 결과를 찾아주고 싶다면 findAllBy를 이용한다. 뒷부분은 똑같이 작성한다.

 

이런식으로 작성하였다. 이때 메소드에 명명한 속성이랑 파라미터가 일치해야 한다. 

 

 

first, top

First, Top은 둘 다 데이터에서 출력할 데이터의 수를 정해서 리턴하게 해준다. 이 키워드 뒤에 숫자를 붙이지 않으면 가장 상위 데이터 하나가 리턴되고, 이름 뒤에 출력할 데이터의 수를 붙이면 해당 수만큼 리턴한다.

List<User> findFirst1ByName(String name);
List<User> findTop2ByName(String name);

 

이런식으로 작성하면 된다.

 

 

And, Or

쿼리문에서 조건을 이어붙일 때 and나 or을 사용했는데, 여기서도 똑같이 사용해주면 된다.

List<User> findByNameAndEmail(String name, String email);

 

 

그 외

그 외에도 다양한 방식의 쿼리문을 제공하고 있다! 공식문서를 참고해보면 좋을 거 같다.

 

 

자료 출처 - Spring 공식 문서

https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html

 

JPA Query Methods :: Spring Data JPA

By default, Spring Data JPA uses position-based parameter binding, as described in all the preceding examples. This makes query methods a little error-prone when refactoring regarding the parameter position. To solve this issue, you can use @Param annotati

docs.spring.io