본문 바로가기
WEB/Back-end

JpaRepository, 페이징처리(SpringBoot)

by 최새벽 2024. 7. 29.

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