반응형
18일 차 특이사항
1. 게시판 페이징 기능 구현 완료.
2. 게시판 페이징 원리
- 컨트롤러(Controller)에서 사용자의 URL 요청을 받습니다.
- 서비스(Service) 클래스에서는 요청을 처리하기 위한 비즈니스 로직을 구현, 필요한 Data를 DB에 요청
- 이때 사용하는 것이 Dao입니다. Dao를 사용하여 데이터베이스에 접근합니다.
- Dao는 데이터베이스와의 통신을 담당하며, 데이터베이스에서 데이터를 조회, 쓰기, 수정, 삭제 등의 작업을 수행
- Dao가 데이터를 가져오면, 서비스 클래스에서는 필요한 데이터 가공 및 비즈니스 로직을 수행
- 서비스 클래스는 처리 결과를 컨트롤러로 반환
- 컨트롤러는 처리 결과를 뷰(View)에 전달하여 사용자에게 보여줍니다.
소스 코드
페이징 처리와 검색 기능을 처리하려면 service 클래스에서 조작 과정이 필요하다.
1) BoardDaoImpl.java
@Repository("dao")
public class BoardDaoImpl implements BoardDao{
@Inject
public SqlSessionTemplate sqlSession;
@Override
public List<Map<String, Object>> list(Map<String, Object> paramMap) {
// TODO Auto-generated method stub
return sqlSession.selectList("mapper.list", paramMap);
}
@Override
public int pageMap(Map<String, Object> paramMap) {
// TODO Auto-generated method stub
return sqlSession.selectOne("mapper.pageMap", paramMap);
}
@Override
public int insert(Map<String, Object> map) {
// TODO Auto-generated method stub
return sqlSession.insert("mapper.insert", map);
}
@Override
public int delete(int seq) {
// TODO Auto-generated method stub
return sqlSession.delete("mapper.delete", seq);
}
@Override
public int update(BoardDto boardDto) {
// TODO Auto-generated method stub
return sqlSession.update("mapper.update", boardDto);
}
}
2) BoardServiceImpl.java
@Service("service")
public class BoardServiceImpl implements BoardService{
@Inject
public BoardDao dao;
@Override
public List<Map<String, Object>> list(Map<String, Object> paramMap) {
int curPage=0;
int pageScale=0;
if(paramMap.isEmpty()) {
curPage = 1;
pageScale = 10;
}else {
curPage = Integer.parseInt(paramMap.get("curPage").toString());
pageScale = Integer.parseInt(paramMap.get("pageScale").toString());
}
int pageBegin = (curPage - 1) * pageScale + 1;
int pageEnd = pageBegin+pageScale - 1;
paramMap.put("pageBegin", pageBegin);
paramMap.put("pageEnd", pageEnd);
return dao.list(paramMap);
}
@Override
public Map<String, Object> pageMap(Map<String, Object> paramMap) {
int count = dao.pageMap(paramMap); // 총 게시글 수
int pageScale = 10; // 페이지당 게시글 수
int blockScale = 5; // 페이징 번호 5개 출력
int curPage = paramMap.get("curPage") == null ? 1 : Integer.parseInt(paramMap.get("curPage").toString());
int totPage = (int) Math.ceil(count * 1.0 / pageScale);
int totBlock = (int) Math.ceil(totPage / blockScale);
// *현재 페이지가 몇번째 페이지 블록에 속하는지 계산
int curBlock = (int) Math.ceil((curPage - 1) / blockScale) + 1;
// *현재 페이지 블록의 시작, 끝 번호 계산
int blockBegin = (curBlock-1) * blockScale + 1;
// 페이지 블록의 끝번호
int blockEnd = blockBegin + blockScale - 1;
// *마지막 블록이 범위를 초과하지 않도록 계산
if(blockEnd > totPage) blockEnd = totPage;
// *이전을 눌렀을 때 이동할 페이지 번호
int prevPage = (curPage == 1) ? 1:(curBlock-1) * blockScale;
// *다음을 눌렀을 때 이동할 페이지 번호
int nextPage = curBlock > totBlock ? (curBlock * blockScale) : (curBlock * blockScale) + 1;
// 마지막 페이지가 범위를 초과하지 않도록 처리
if(nextPage >= totPage) nextPage = totPage;
Map<String, Object> pageMap = new HashMap<String, Object>();
pageMap.put("curBlock", curBlock);
pageMap.put("prevPage", prevPage);
pageMap.put("blockBegin", blockBegin);
pageMap.put("blockEnd", blockEnd);
pageMap.put("curPage", curPage);
pageMap.put("totBlock", totBlock);
pageMap.put("nextPage", nextPage);
pageMap.put("totPage", totPage);
return pageMap;
}
@Override
public int insert(Map<String, Object> map) {
// TODO Auto-generated method stub
return dao.insert(map);
}
@Override
public int delete(int seq) {
// TODO Auto-generated method stub
return dao.delete(seq);
}
@Override
public int update(BoardDto boardDto) {
// TODO Auto-generated method stub
return dao.update(boardDto);
}
}
검색 후 페이지 블락 클릭 시 오류
특정 키워드를 검색하고 아래 페이지 블락을 클릭하면 검색 키워드가 풀려버린다. 검색조건을 남기는 작업 필요하다. 어떻게 할지 고민해 봐야겠다.
반응형
'일경험' 카테고리의 다른 글
[국민취업지원제도 일경험프로그램 20일차] ajax 비동기 방식 (0) | 2023.08.29 |
---|---|
[국민취업지원제도 일경험프로그램 19일차] 동기 방식과 비동기 방식의 차이점 (0) | 2023.08.28 |
[국민취업지원제도 일경험프로그램 17일차] 게시판 검색, 게시판 페이징 (0) | 2023.08.24 |
[국민취업지원제도 일경험프로그램 16일차] 게시판 페이징 기능, 게시판 검색 기능 (0) | 2023.08.23 |
[국민취업지원제도 일경험프로그램 15일차] 게시판 페이징 처리... (0) | 2023.08.22 |