[작성일: 2023. 04. 30]
2024.08.24 - [WEB/Back-End] - [Spring] 게시판(Board) 만들기
paging
- 게시글, 내용 등의 개수가 일정 개수를 넘어가는 경우 전체를 가져와서 화면에 보여주는 것은 비효율 적임.
- 한 페이지에서 보여줄 게시글의 개수를 정하고 그 중 몇 페이지가 현재 페이지인지를 결정하는 방식이 필요함.
paging 처리 단계
Criteria 생성
- 한 페이지에 보여줄 글의 개수, 몇 번째 페이지인지를 포함하는 클래스 생성
- pageNum, amount, limit, offset
- 생성자 생성(2개)
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@Data // getter, setter 관리
public class Criteria { // 게시글 검색의 기준
private int pageNum; // 현재 몇 번째 페이지인가
private int amount; // 한 페이지에 보여질 게시글의 수
public Criteria() {
this(1, 10);
// pageNum = 1;
// amount = 10;
}
public Criteria(int pageNum, int amount) {
this.pageNum = pageNum;
this.amount = amount;
}
}
BoardMapper.xml
- getListwithPaging인 SQL을 작성
- getList와 거의 유사하나 where 조건에 페이징 처리가 들어감.
<select id="getListWithPaging" resultType="boardVO">
<![CDATA[
SELECT * FROM TBL_BOARD a
WHERE BNO > 0
ORDER BY BNO DESC
LIMIT #{amount} OFFSET #{pageNum-1}
]]>
</select>
BoardMapper.java
- getListWithPaging 메서드 생성
// 게시글 목록(페이징 처리)
public List<BoardVO> getListWithPaging(Criteria cri);
BoardMapperTest.java
- testGetListWithPaging()으로 JUnit Test 실행
@Test
public void testGetListWithPaging() {
Criteria cri = new Criteria();
cri.setAmount(5);
cri.setPageNum(0);
List<BoardVO> list = mapper.getListWithPaging(cri);
list.forEach(board -> log.info("---------------------" + board.getBno()+""));
}
BoardDAO
- 전체 글 불러오는 것에서 페이징 처리 글 불러올 수 있도록 getList(Criteria cri) 추가
// 전체 게시글 가져오기(페이징 처리)
public List<BoardVO> getList(Criteria cri) {
return mapper.getListWithPaging(cri);
}
BoardService.java
- 신규로 getList(Criteria cri) 추가
@Service
public interface BoardService {
public void register(BoardVO board);
public BoardVO get(Long bno);
public boolean modify(BoardVO board);
public boolean remove(Long bno);
public List<BoardVO> getList();
public List<BoardVO> getList(Criteria cri);
}
BoardSeriviceImp.java
- getList(Criteria cri) 구현
@Override
public List<BoardVO> getList(Criteria cri){
return boardDAO.getList(cri);
};
BoardController.java
- list() 수정
@GetMapping("list")
public void list(Criteria cri, Model model) {
log.info("----------------------------");
log.info("[BoardController] list() : ");
log.info("----------------------------");
model.addAttribute("list", service.getList(cri));
DAO Test, Service Test 수행
Controller Test(MockUp) 수행
현재 페이지 + 이전 이후 페이지들 관리를 위한 pageDTO
pageDTO class 생성
startPage, endPage, realEnd 계산 로직
list.html
- pageDTO를 보여줄 div 생성
a link 생성
- th:if, th:unless를 이용하여 현 게시판에는 link가 없도록 조치
javascript
- 링크 클릭 시 데이터를 넣고 서비스 호출
- preventDefault 함수를 이용하여 a 본연의 기능 제거
현재 페이지 기억 기능
- get 또는 modify 후 원래 조회하던 리스트 페이지 저장
- Criteria에 URI 저장 메서드 생성
- get, modify에 cri가 포함되어 전송되도록 코드 수정
🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.