슬슬 프로젝트를 시작했고, 엔티티와 레포지터리, 약간의 서비스 부분을 진행하였다. 첫 프로젝트라 다른 분의 코드를 조금씩 참고하는데, 처음보는 것이 있었다.
레포지터리를 인터페이스로 작성했는데 구현체가 없었다 !! 이유는 저 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
'토이프로젝트 > 1. Ride Together HYU - BE' 카테고리의 다른 글
[프로젝트/BE/SpringBoot] 0. 시작 전 기초 정리 (2) - DTO, DAO, TDD (0) | 2024.03.29 |
---|---|
[프로젝트/BE/SpringBoot] 0. 시작 전 기초 정리 (1) - @NoArgsContructor, @Data, @Builder (0) | 2024.03.28 |