Dev/Spring

Spring Boot (엔티티 클래스와 JpaRepository, 테스트 코드 작성, 조회 작업 테스트, 페이징 정렬처리)

Walker_ 2024. 5. 13. 10:48

1. 엔티티 클래스와 JpaRepository

 - (폴더와 파일은 무조건 메인 메서드 있는 곳에 만드는 구조로 해야 함) 

 - 새로운 프로젝트에 새로운 패키지와 클래스 생성

package entity;

import jakarta.persistence.*;
import lombok.ToString;

@Entity
@Table(name = "tbl_memo")
@ToString
public class Memo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;
}

 - 코드 작성

package entity;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Table(name = "tbl_memo")
@ToString
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Memo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;

    @Column(length = 200, nullable = false)
    private String memoText;
}

 - 코드 추가

spring.application.name=spring_boot_project_02

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3308/boot_ex_jpa
spring.datasource.username=root
spring.datasource.password=5046

spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true

 - application.properties에 위 코드 추가

 - 패키지와 인터페이스 새로 생성

package repository;

import entity.Memo;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemoRepository extends JpaRepository<Memo, Long> {
}

 

  - 코드 입력

 

2. 테스트 코드 작성

 

package com.example.spring_boot_project_02.repository;

import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import repository.MemoRepository;

@SpringBootTest
@Log4j2
public class MemoRepositoryTest {
    @Autowired
    private MemoRepository memoRepository;

    @Test
    public void testClass() {
        log.info(memoRepository.getClass().getName());
    }
}

 

 -  테스트 패키지, 파일 생성 후 코드 작성

 

3. 조회 작업 테스트

@Test
public void testSelect() {
    // 데이터베이스에 존재하는 mno
    Long mno = 100L;

    Optional<Memo> optionalMemo = memoRepository.findById(mno);
    log.info("======");
    if (optionalMemo.isPresent()) {
        Memo memo = optionalMemo.get();
        log.info(memo);
    }
}

 

 - 조회 작업 테스트 코드 

 

4. 페이징 정렬처리

@Test
public void testPageDefault() {
    // 1페이지 10개
    Pageable pageable = (Pageable) PageRequest.of(0, 10);
    Page<Memo> memoPage = memoRepository.findAll((org.springframework.data.domain.Pageable) pageable);
    log.info(memoPage);
}
@Test
public void testPageDefault() {
    // 1페이지 10개
    Pageable pageable = (Pageable) PageRequest.of(0, 10);
    Page<Memo> memoPage = memoRepository.findAll((org.springframework.data.domain.Pageable) pageable);
    log.info(memoPage);
    log.info("---------");
    log.info("Total Pages : " + memoPage.getTotalPages()); // 총 몇개 페이지
    log.info("Total Count : " + memoPage.getTotalElements()); // 전체 개수
    log.info("Page Number : " + memoPage.getNumber()); // 현재 페이지 번호. 0부터 시작
    log.info("Page Size : " + memoPage.getSize()); // 페이지당 데이터 수
    log.info("has Next page? : " + memoPage.hasNext()); // 다음 페이지
    log.info("first page? : " + memoPage.isFirst()); // 시작 페이지(0) 여부
}

 

log.info("------------------");
for (Memo memo : memoPage.getContent()) {
    log.info(memo);
}

 

 


공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.

부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.

읽어주셔서 감사합니다 :)