1. Entity 클래스의 ToString
@Test
@Transactional
@DisplayName("엔티티 클래스 ToString")
public void entityToString(){
BoardEntity boardEntity = boardRepository.findById(1L).get();
System.out.println("boardEntity = " +boardEntity);
}
Entity 클래스에는 @ToString 어노테이션을 사용하면 에러가 나므로 테스트를 이용해서 확인해 준다.

ToString이 없기 때문에 참조값이 나온다.
2. FindAll 정렬하기
@Test
@Transactional
@DisplayName("findAll 할 때 정렬해서 가져오기")
public void findAllOrderBy() {
List<BoardEntity> boardEntityList = boardRepository.findAll(Sort.by(Sort.Direction.DESC, "id"));
boardEntityList.forEach(boardEntity -> {
System.out.println(BoardDTO.toDTO(boardEntity));
});
}
Sort를 이용해서 id를 기준으로 내림차순 하겠다는 뜻이다.

id를 기준으로 내림차순 되었다.
3. DB에 데이터 붓기
private BoardDTO newBoard(int i) {
BoardDTO boardDTO = new BoardDTO();
boardDTO.setBoardTitle("title"+i);
boardDTO.setBoardWriter("writer"+i);
boardDTO.setBoardContents("contents"+i);
boardDTO.setBoardPass("pass"+i);
return boardDTO;
}
새 메서드를 만들어서 숫자를 입력하면 그에 맞는 DTO를 생성하도록 하였다.
@Test
@Transactional
@Rollback(value = false)
@DisplayName("DB에 데이터 붓기")
public void saveList() {
IntStream.rangeClosed(1,50).forEach(i -> {
boardRepository.save(BoardEntity.toSaveEntity(newBoard(i)));
});
}
Save 메소드를 이용해서 IntStream.rangeClosed를 이용해 1~50까지의 구역을 만든 후 1~50을 forEach문으로 데이터를 양산해 준다.
4. 페이징 코드 테스트
@Test
@Transactional
@DisplayName("페이징 객체 메소드 확인")
public void pagingMethod() {
int page = 0; // 요청한 페이지 번호
int pageLimit = 3; // 한페이지 당 보여줄 글 갯수
Page<BoardEntity> boardEntities = boardRepository.findAll(PageRequest.of(page, pageLimit, Sort.by(Sort.Direction.DESC, "id")));
// Page 객체가 제공해주는 메서드 확인
System.out.println("boardEntities.getContent() = " + boardEntities.getContent()); // 요청페이지에 들어있는 데이터
System.out.println("boardEntities.getTotalElements() = " + boardEntities.getTotalElements()); // 전체 글갯수
System.out.println("boardEntities.getNumber() = " + boardEntities.getNumber()); // 요청페이지(jpa 기준)
System.out.println("boardEntities.getTotalPages() = " + boardEntities.getTotalPages()); // 전체 페이지 갯수
System.out.println("boardEntities.getSize() = " + boardEntities.getSize()); // 한페이지에 보여지는 글갯수
System.out.println("boardEntities.hasPrevious() = " + boardEntities.hasPrevious()); // 이전페이지 존재 여부
System.out.println("boardEntities.isFirst() = " + boardEntities.isFirst()); // 첫페이지인지 여부
System.out.println("boardEntities.isLast() = " + boardEntities.isLast()); // 마지막페이지인지 여부
// Page<BoardEntity> -> Page<BoardDTO>
Page<BoardDTO> boardList = boardEntities.map(boardEntity ->
BoardDTO.builder()
.id(boardEntity.getId())
.boardWriter(boardEntity.getBoardWriter())
.boardTitle(boardEntity.getBoardTitle())
.createdAt(UtilClass.dateFormat(boardEntity.getCreatedAt()))
.boardHits(boardEntity.getBoardHits())
.build()
);
System.out.println("boardEntities.getContent() = " + boardList.getContent()); // 요청페이지에 들어있는 데이터
System.out.println("boardEntities.getTotalElements() = " + boardList.getTotalElements()); // 전체 글갯수
System.out.println("boardEntities.getNumber() = " + boardList.getNumber()); // 요청페이지(jpa 기준)
System.out.println("boardEntities.getTotalPages() = " + boardList.getTotalPages()); // 전체 페이지 갯수
System.out.println("boardEntities.getSize() = " + boardList.getSize()); // 한페이지에 보여지는 글갯수
System.out.println("boardEntities.hasPrevious() = " + boardList.hasPrevious()); // 이전페이지 존재 여부
System.out.println("boardEntities.isFirst() = " + boardList.isFirst()); // 첫페이지인지 여부
System.out.println("boardEntities.isLast() = " + boardList.isLast()); // 마지막페이지인지 여부
}
Page를 이용해 기본 메서드를 이용해 페이징에 필요한 값을 뽑아낼 수 있다.
하지만 Entity기 때문에 ToString이 없기 때문에 DTO로 변환해 준다.
여기서 map을 쓰는데 이것은 Entity를 DTO로 변환해 주는 메서드다.
페이징처리를 하기 때문에 페이징처리에 필요한 필드값만 build를 이용해서 삽입한다.

페이징 처리에 필요한 값을 손쉽게 사용할 수 있는 게 Spring boot의 장점 같다.
'Spring > Spring boot icia 74일차' 카테고리의 다른 글
| Spring boot 게시판 댓글처리 (0) | 2023.06.08 |
|---|