JPA Repository
엔티티 객체를 처리하는 기능을 가지는 레포지토리
해당 인터페이스를 정의하여 Hibernate 구현체를 활용할 수 있음
Spring Data JPA 활용을 위해 스프링 부트 설정하기
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/bootex
spring.datasource.username=testuser
spring.datasource.password=test1234
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
연결하고자 하는 데이터베이스와 맞게 application.properties 파일 설정
- spring.jpa.hibernate.ddl-auto: 프로젝트 실행시에 자동으로 ddl을 생성할 것인지 결정하는 설정
- spring.jpa.hibernate.format-sql: JPA의 구현체인 hibernate가 동작하며 발생하는 SQL을 포맷팅해서 출력
- spring.jpa.show-sql: JPA 처리시 발생하는 SQL을 보여줄 것인지 결정
JpaRepository 사용
package org.example.ex2.repository;
import org.example.ex2.entity.Memo;
import org.springframework.data.*;
import java.util.List;
public interface MemoRepository extends JpaRepository<Memo, Long> {
Memo findByMemoText(String memoText);
List<Memo> findByMemoTextContaining(String memoText);
List<Memo> findByMemoTextContainingOrMemoTextContaining(String memoText, String memoText2);
Page<Memo> findByMnoBetween(Long from, Long to, Pageable pageable);
void deleteMemoByMnoLessThan(Long num);
}
MemoRepository 에서 JpaRepository를 상속하는 것만으로 자동으로 스프링 빈으로 등록됨
(스프링이 내부적으로 인터페이스 타입에 맞는 객체를 생성해서 빈으로 등록)
JpaRepository CRUD
- insert 작업: save(엔티티 객체)
- select 작업: findById(키 타입), getOne(키 타입)
- update 작업: save(엔티티 객체)
- delete 작업: deleteById(키 타입), delete(엔티티 객체)
페이징/정렬 처리
Pageable 인터페이스:
org.springframework.data.domain.Pageable 인터페이스, 페이지 처리에 필요한 정보를 전달하는 용도의 타입
PageRequest:
Pageable인터페이스의 실제 구현체. new를 통해 생성이 불가능하며 of()라는 메서드를 통해 생성할 수 있음.
- of(int page, int size): 0부터 시작, size는 개수, 정렬 지정x
- of(int page, int size, Sort.Direction direction, String...Props): 0부터 시작, 정렬의 방향과 정렬 기준 필드들
- of(int page, int size, Sort sort): 페이지 번호와 개수, 정렬 관련 정보
Pageable pageable = PageRequest.of(0, 10); // 0부터 시작, 한 페이지에 10개의 데이터
Page<Memo> result = memoRepository.findAll(pageable);
// ---------------------------------------
Pageable pageable = PageRequest.of(0, 10, Sort.by("mno").descending()); // 0부터 시작, 한 페이지에 10개의 데이터, mno를 기준으로 내림차순
Page<Memo> result = memoRepository.findByMnoBetween(10L, 50L, pageable); // 10부터 50사이의 데이터 검색
result.get().forEach(m -> System.out.println(m));
* 신한DS아카데미 수강 내용 기반
* 코드로 배우는 스프링 부트 웹 프로젝트 책 기반
'WEB > Back-end' 카테고리의 다른 글
(SQL) 함수, 문자데이터 가공 함수 (0) | 2024.07.29 |
---|---|
(SQL) SQL 표준, SELECT문 (0) | 2024.07.29 |
JPA, Entity Class(SpringBoot) (0) | 2024.07.29 |
Comparable, Comparator (Java) (0) | 2024.07.18 |
properties, path, lambda, stream (Java) (0) | 2024.07.18 |