[JPA] JpaRepository 사용하기

SJ·2022년 12월 3일

JPA

목록 보기
2/12
post-thumbnail

JpaRepository <Entity 클래스, id 타입>


public interface MemberRepository extends JpaRepository<Member,Long>
  • 스프링 부트에서는 엔티티의 기본적인 CRUD가 가능하도록 JpaRepository 인터페이스를 제공한다.
  • 사용하려면 단순히 JpaRepository를 상속하기만 하면 되며, @Repository 어노테이션은 추가할 필요 없다.
  • 상속한 것만으로도 Member 엔티티의 CRUD 메서드를 지원한다.
    • save(): 레코드 저장(insert,update).
    • findAll(): 전체 레코드 불러오기. 정렬(sort),페이징(pageable)이 가능하다.
    • findOne(): Primary Key로 레코드 한 건 찾기.
    • delete(): 레코드 삭제
    • count(): 레코드 갯수

JpaRepository에 메소드 추가하기

JpaRepository가 기본적으로 지원하는 검색 메소드는 findAll(),findById() 가 있다.
그러나 DB에 접근하다보면 유저 이름으로 찾아야 할 때가 있고, 그 외의 필드로 DB에 있는 정보를 꺼내오고 싶을때가 있다. 그럴때 인터페이스에 메소드를 추가할 수 있다.

public List<Member> findByUsername(String username);

위와 같이 유저 이름으로 멤버를 찾는 메소드를 추가할 수 있는데, 메소드 명을 정하는데 몇몇 규칙이 존재한다. 정해진 규칙대로 메소드를 선언하면, 알아서 메소드가 생성된다.


JpaRepository 명명 규칙

findByXX

가장 기본적인 메소드. findBy 이후에 엔티티의 속성 이름을 붙인다. 이 속성 이름은 첫 글자는 대문자로 한다. 예를 들어, name을 검색한다면 findByName()이며, mail에서 찾는다면 findByMail()가 된다.

아래는 findByXX다음에 이어서 붙이면 되는 속성이다. ex) findByNameLike()

Like / NotLike

퍼지 검색에 관한 속성이다. Like를 붙이면, 인수에 지정된 텍스트를 포함하는 엔티티를 검색한다. 또한 NotLike을 쓰면 인수의 텍스트를 포함하지 않는 것을 검색한다. findByNameLike()라고 선언하면, name에서 인수의 텍스트를 퍼지 검색한다.

StartingWith / EndingWith

텍스트 값에서 인수에 지정된 텍스트로 시작하거나 끝나는 것을 검색하기 위한 것이다. findByNameStartingWith("A")이라면, name의 값이 "A"로 시작하는 항목을 검색한다.

IsNull / IsNotNull

값이 null이 거나, 혹은 null이 아닌 것을 검색한다. 인수는 필요없다. findByNameIsNull()이라면, name의 값이 null의 것만 검색한다.

True / False

부울 값으로 true 인 것, 혹은 false 인 것을 검색한다. 인수는 필요없다. findByCheckTrue()이라면, check라는 항목이 true 인 것만을 검색한다.

Before / After

시간 값으로 사용한다. 인수에 지정한 값보다 이전의 것, 혹은 이후 것을 검색한다. findByCreateBefore(new Date())라고 하면, create라는 항목의 값이 현재보다 이전의 것만을 찾는다 (create가 Date 인 경우).

LessThan / GreaterThan

숫자 값으로 사용한다. 그 항목의 값이 인수보다 작거나 큰 것을 검색한다. findByAgeLessThan(20)이라면, age의 값이 20보다 작은 것을 찾는다.

Between

두 값을 인수로 가지고 그 두 값 사이의 것을 검색한다. 예를 들어, findByAgeBetween(10, 20)라고 한다면 age 값이 10 이상 20 이하인 것을 검색한다. 수치뿐만 아니라 시간의 항목 등에도 사용할 수 있다.


이외에도 수많은 속성이 존재하는데, 이를 잘 활용한다면 JpaRepository 인터페이스를 이용하여 편리하게 DB에서 자료를 검색할 수 있다.

profile
slowly But Surely

0개의 댓글