Developer N
[JPA] JPA 사용법 본문
728x90
JPA 개념은 아래 더보기 참고
1. Entity 클래스 생성 (@Entity 사용)
- 데이터베이스에 저장하기 위해 유저가 정의한 클래스 (Domain)
- RDBMS에서 Table을 객체화시킨 것. 따라서 Table의 이름이나 칼럼들에 대한 정보를 가짐.
- @Entity로 선언된 클래스의 이름은 실제 데이터베이스의 테이블명과 일치하는 것을 매핑
- 어노테이션
- @Id
- Primary Key를 가지는 변수를 선언한다는 의미.
- @GeneratedValue 어노테이션으로 해당 Id값을 어떻게 자동으로 생성할지 선택 가능
- @Table
- 별도의 이름을 가진 데이터베이스 테이블과 매핑할때 사용
- @Table(name=" ")
- @Column
- 꼭 선언할 필요 없음. 기본적으로 멤버 변수명과 일치하는 데이터베이스 칼럼을 매핑
- 변수명과 데이터베이스의 칼럼명을 서로 다르게 주고싶다면 @Column(name=" ") 형식으로 작성
- @Id
2. Repository 인터페이스 생성
- Entity 클래스 작성 후 Repository 인터페이스 생성 필요
- 스프링부트에서는 기본적인 CRUD가 가능하도록 JpaRepository 인터페이스 제공
- Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속하기만 하면 됨
- 인터페이스에 별도의 @Repository 등의 어노테이션 추가X
- JpaRepository를 상속받을 때 사용될 Entity 클래스와 ID값 입력
- JpaRepository<T, ID>
- JpaRepository 상속시 Entity에 아래와 같은 기본 기능 제공
Method | 기능 |
save() | 레코드 저장 (insert, update) |
findOne() | primary key로 레코드 한 건 찾기 |
findAll() | 전체 레코드 찾기. 정렬(sort), 페이징(pageable) 가능 |
count() | 레코드 개수 조회 |
delete() | 레코드 삭제 |
- 그외 기능 추가하려면 아래의 규칙에 맞게 메서드를 추가
- findBy 뒤에 해당 Entity 필드 입력시 검색쿼리를 실행한 결과를 전달
- 반환형이 Entity 객체이면 하나의 결과만 전달
- 반환형이 List라면 쿼리에 해당하는 모든 객체 전달
Method | 설명 |
findBy로 시작 | 쿼리를 요청하는 메서드 |
countBy로 시작 | 쿼리 결과 레코드 수를 요청하는 메서드 |
- query 메소드에 포함할 수 있는 키워드
Method 이름 키워드 | 샘플 | 설명 |
And | findByUserIdAndEmail(String userId, String email) | 여러 필드를 and로 검색 |
Or | findByUserIdOrEmail(String userId, String email) | 여러 필드를 or로 검색 |
Between | findByCreatedAtBetween(Date fromDate, Date toDate) | 필드의 두 값 사이에 있는 항목 검색 |
LessThan | findByAgeLessThan(int age) | 작은 항목 검색 |
GreaterThanEqual | findByAgeGraterThanEqual(int age) | 크거나 같은 항목 검색 |
Like | findByNameLike(String name) | like 검색 |
IsNull | findByJobIsNull() | null 인 항목 검색 |
In | findByJob(String … jobs) | 여러 값중에 하나인 항목 검색 |
OrderBy | findByEmailOrderByNameAsc(String email) | 검색 결과를 정렬하여 전달 |
- Pageable
- 쿼리 메소드의 파라미터로 Pageable 변수 추가시 Page 타입을 return형으로 사용 가능 (Pageable 객체를 통해 페이징과 정렬을 위한 파라미터를 전달)
- Pageable 입력 변수는 Controller에서부터 전달받아야 함
쿼리 파라미터 명 | 설명 |
page | 몇번째 페이지인지 전달 |
size | 한 페이지에 몇개의 항목을 보여줄 것인지 전달 |
sort | 정렬 정보를 전달 정렬정보는 필드이름, 정렬 방향의 포맷으로 전달 여러 필드로 순차적 정렬도 가능 |
참고)
JPA 사용법 (JpaRepository) (tistory.com)
728x90
'STUDY > JAVA | SPRING' 카테고리의 다른 글
[Java] 로깅(logging) 사용 방법 (0) | 2023.02.27 |
---|---|
[Java] HttpServletRequest 사용하여 주소 정보 가져오기 (0) | 2023.02.24 |
[JPA] Pageable을 활용한 Pagination (0) | 2023.02.21 |
[Spring] ResponseEntity(HttpStatus) (0) | 2023.02.21 |
[JPA] JPA(Java Persistence API)란? (0) | 2023.02.21 |
Comments