[SpringBoot] 스프링부트 프로젝트 생성 후 JPA 사용 및 테스트하기3 Pageing~쿼리 메소드 및 @Query 테스트~(만들기 스프링부트3.25 )_IntelliJ IDEA 2024.1 JDK17 spring-boot test--++

  * 초기 세팅 (개발환경) 및 설정 

https://rockbottomdevbus.blogspot.com/2024/04/springboot-1-325-intellij-idea-20241.html

* 이전글 
[SpringBoot] 스프링부트 프로젝트 생성 후 JPA 사용 및 테스트하기1 엔티티 설정 및 Insert 테스트~JPA 사용방법~


[SpringBoot] 스프링부트 프로젝트 생성 후 JPA 사용 및 테스트하기2 RUD 테스트~ORM/JPA~
* 테스트 설정 + Paging
6. Paging
- BoardRepositoryTests.java Paging 테스트 메서드 추가
--BoardRepositoryTests.java 
//Pageable  Page<E> 타입을 이용한 페이징처리
//페이징 처리는 Pageable 이라는 타입의 객체를 구성해서 파라미터로 전달...
//Pageable은 인터페이스로 설계되어 있고, 일반적으로 PageRequest.of를 이용해서 개발함.
//PageRequest.of(페이지번호,사이즈) : 페이지번호는 0번부터...
//PageRequest.of(페이지번호,사이즈, sort) : sort 객체를 통한 정렬조건 추가
//PageRequest.of(페이지번호,사이즈, sort.Direction, 속성) : 정렬 방향과 여러 속성 추가 저장

//Pageable로 값으로 값을 넘기면 반환 타입은 Page<T> 이를 이용하게 됨.
@Test
public void testPageing() {
//1 page order by bno desc
Pageable pageable = PageRequest.of(0,10, Sort.by("bno").descending());

Page<Board> result = boardRepository.findAll(pageable);
log.info("totalCnt : " + result.getTotalElements());
log.info("total page : " + result.getTotalPages());
log.info("page number : " + result.getNumber());
log.info("page size : " + result.getSize());
log.info("page 다음페이지 여부 : " + result.hasNext());
log.info("page 이전페이지 여부 : " + result.hasPrevious());

List<Board> boardList = result.getContent();
boardList.forEach(board -> log.info("board : " + board));

}

* 쿼리 메소드 및 @Query 테스트
1. 쿼리 메서드 / @Query 설정 추가 
- BoardRepository.java 쿼리 메서드 / @Query 설정 추가 
--BoardRepository.java 
package org.zerock.b01.repository;


import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.zerock.b01.domain.Board;
import org.zerock.b01.repository.search.BoardSearch;

public interface BoardRepository extends JpaRepository<Board,Long> , BoardSearch {

Page<Board> findByTitleContainingOrderByBnoDesc(String keyword, Pageable pageable);

//@Query 어노테이션에서 사용하는 구문은 JPQL을 이용합니다.
//JPQL SQL과 유사하게 JPA에서 사용하는 쿼리 언어
//@Quer 를 이용하는 경우...
// 1. 조인과 같이 복잡한 쿼리를 실행하려고 할 때
// 2. 원하는 속성만 추출해서 Object[] 로 처리하거나 DTO로 처리가 가능
// 3. 속성 값 중 nativeQuery 속성값을 true로 지정하면 sql 구문으로 사용가능함.
@Query("select b from Board b where b.title like concat('%' , :keyword, '%' ) ")
Page<Board> findKeyword(String keyword, Pageable pageable);

@Query(value = "select now()" , nativeQuery = true)
String getTime();

}


2. 쿼리 메서드 / @Query 테스트

- BoardRepositoryTests.java 파일에 테스트용 쿼리 메서드 / @Query 메서드 추가

--BoardRepositoryTests.java 

//쿼리 메서드 및 @Query 테스트
@Test
public void testQueryMethod() {
Pageable pageable = PageRequest.of(0,10);

String keyword = "Title";

Page<Board> result = boardRepository.findByTitleContainingOrderByBnoDesc(
keyword,pageable
);

result.getContent().forEach(board -> log.info("board : " + board));
}

@Test
public void testQueryAnnotation() {
Pageable pageable = PageRequest.of(0,10, Sort.by("bno").descending());


String keyword = "Title";

Page<Board> result = boardRepository.findKeyword("titile",pageable);

result.getContent().forEach(board -> log.info("board : " + board));

}

@Test
public void testGetTime() {
log.info(boardRepository.getTime());
}


* 다음 글 

[SpringBoot] 스프링부트 프로젝트 생성 후 JPA 사용 및 테스트하기4 Search~라이브러리 추가~


댓글

T O P