[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~라이브러리 추가~
댓글
댓글 쓰기