<TIL> 55. JPA 사용법(JPA Repository)

YUJIN LEE·2023년 3월 10일
0

개발log

목록 보기
50/149

@Entity

데이터베이스에 저장하기 위해 유저가 정의한 클래스. -> Domain과 비슷함.
RDBMS에서 Table을 객체화시킨 것.
-> Table의 이름이나 컬럼들에 대한 정보를 가짐.

@Entity안의 Annotation

@Id

primary key를 가지는 변수를 선언.
@GeneratedValue 어노테이션은 해당 Id값을 어떻게 자동으로 생성할지 전략을 선택할 수 있다.

@Table

별도의 이름을 가진 DB테이블과 매핑.
기본적으로 @Entity로 선언된 클래스의 이름은 실제 DB의 테이블 명과 일치하는 것을 매핑.
@Entity 클래스명과 DB 테이블명이 다를 경우 @Table(name= " ")과 같은 형식을 사용해 매핑.

@Column

@Column 선언이 꼭 필요하진 않음.
하지만, @Column에서 지정한 변수명과 DB의 컬럼명을 서로 다르게 주고 싶다면,
@Column(name=" ") 같은 형식으로 작성.
그렇지 않은 경우, 멤버 변수명과 일치하는 데이터베이스 컬럼 매핑.

Repository

Entity 클래스 작성 후 Repository 인터페이스를 생성해야함.
springboot에서는 Entity의 기본적인 CRUD가 가능하도록 JpaRepository 인터페이스 제공.
Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속하기만하면 됨.

JpaRepository를 상속받을 때는 사용될 Entity 클래스와 ID값이 들어감.
즉 JpaRepository<T,ID>

이렇게 상속받기만해도 위의 인터페이스는 Entity 하나에 대해 다음과 같은 기능 제공.

method / 기능

save() - 레코드 저장(insert, update)
findOne() - primary key로 레코드 한건 찾기
findAll() - 전체 레코드 불러오기, 정렬(sort), 페이징(pageable) 기능
count() - 레코드 갯수
delete() - 레코드 삭제

위의 기본기능을 제외한 조회 기능을 추가하고 싶으면 규칙에 맞는 메서드 추가.

method / 설명
findBy로 시작 - 쿼리를 요청하는 메서드 임을 알림
countBy로 시작 - 쿼리 결과 레코드 수를 요청하는 메서드 임을 알림

위의 findBy에 이어 해당 Entity 필드 이름을 입력시 검색 쿼리를 실행한 결과 전달.
SQL의 where절을 메서드 이름을 통해 전달한다고 생각하면 된다.

메서드의 반환형이 Entity 객체 -> 하나의 결과만 전달.
반환경이 List -> 쿼리에 해당하는 모든 객체 전달.

Query 메소드에 포함할 수 있는 키워드

메서드 이름 키워드 / 샘플 /설명

And / findByEmailAndUserId(String email, String userId) / 여러필드를 and로 검색

Or / findByEmailOrUserId(String email, String userId) / 여러필드를 or로 검색

Between / findByCreatedAtBetween(Data fromDate, Date toDate) / 필드의 두 값 사이에 있는 항목 검색

LessThan / findByAgeGraterThanEqual(int age) / 작은 항목 검색

GreaterThanEqual / findByAgeGraterThanEqual(int age) / 크거나 같은 항목 검색

Like / findByNameLike(String name) / like 검색

IsNull / findByJobIsNull() / Null인 항목 검색

In / findByJob(String... jobs) / 여러 값 중에 하나인 항목 검색

OrderBy / findByEmailOrderByNameAsc(String email) / 검색 결과를 정렬해 전달

JPA 레퍼런스

Pageable

Query 메소드의 입력변수로 위와 같이 Pageable 변수를 추가하면 Page타입을 반환형으로 사용할 수 있다.
Pageable 객체를 통해 페이징과 정렬을 위한 파라미터를 전달.

Pageable 입력 변수는 아래와 같이 Controller에서부터 전달받아야 한다.

Pageable에서는 다음과 같은 파라미터를 자동 수집.

query parameter명 / 설명
page / 몇번째 페이지 인지를 전달
size / 한 페이지에 몇개의 항목을 보여줄 것인지 전달
sort / 정렬정보를 전달, 정렬정보는 필드이름, 정렬방향의 포맷으로 전달.
여러 필드로 순차적으로 정렬도 가능.

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글