20250320 페이징 다이어그램.png

<aside> 💡

section = 사용자가 볼 게시글수 pageNum = 페이지번호 totalArticles = 총 게시글 수 pageSize = 게시글수 startRow = 시작 페이지 (pageNum - 1) * pageSize + 1; endRow = 마지막 페이지 pageNum * pageSize;

</aside>

  1. 테이블을 확인
-- 게시판_내집소개
CREATE TABLE boardMyhome
            ( boardMyhomeArticleNo number(10) primary key,
              memberId VARCHAR2(16), -- FOREIGN KEY
              boardMyhomeTitle VARCHAR2(20), -- 제목
              boardMyhomeContents VARCHAR2(4000), -- 내용
              boardMyhomeLikes number(10) default 0, -- 좋아요
              boardMyhomeViews number(10) default 0, -- 조회수
              boardMyhomeUpdated date de fault sysdate, -- 등록일
              boardMyhomeHomeSize VARCHAR2(10), -- 평수 카테고리
              boardMyhomeHousingtype VARCHAR2(30), -- 주거 형태 카테고리
              CONSTRAINT BoardMyhome_Member_Id_FK FOREIGN KEY(memberId)
              REFERENCES member(memberId)
            );
-- 사진
CREATE TABLE image
            ( imageNo number(10) primary key,
              articleNo number(10), -- 가져올 게시글 번호
              imageFilename VARCHAR2(50), -- 파일 이름
              imageUpdated date default sysdate, -- 등록일
              imageType VARCHAR2(20) -- 구분 (공지사항/문의/상품/내집소개/리뷰)
            );
  1. 컨트롤러
package com.spring.gami.mypage.myhome.controller;

@Controller("myPageMyhomeController")
@RequestMapping("/mypage/myhome")
public class MyPageMyhomeController {
	
	@Autowired
	MyhomeDomain myhomeDomain;
	@Autowired
	MyPageMyhomeService myPageMyhomeService;
	@Autowired
	LikeService likeService;
	
    // 게시글 리스트 출력
    @RequestMapping(value = "/myPageMyHomeList.do", method = {RequestMethod.GET, RequestMethod.POST})
    public ModelAndView myHomelist(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception {
    	
    	//멤버아이디 가져오기
    	MemberDomain memberDomain = (MemberDomain) session.getAttribute("member");
    	String memberId = memberDomain.getMemberId();

    	String _section = request.getParameter("section"); //사용자가 볼 게시글수
    	String _pageNum = request.getParameter("pageNum"); //페이지번호
    	int section = Integer.parseInt(((_section == null) ? "1" : _section));
    	int pageNum = Integer.parseInt(((_pageNum == null) ? "1" : _pageNum));
    	//페이징
    	int pageSize = 12; //한페이지에 보여줄 게시글수
    	int startRow = (pageNum-1) * pageSize+1; //시작
    	int endRow = pageNum * pageSize;         //마지막
    	
    	//Map
    	Map<String, Object> pagingMap = new HashMap<>();
    	pagingMap.put("section", section);
    	pagingMap.put("pageNum", pageNum);
    	pagingMap.put("memberId", memberId);
    	pagingMap.put("startRow", startRow); //시작
    	pagingMap.put("endRow", endRow);     //끝

    	Map<String, Object> myhomeMap = myPageMyhomeService.listArticles(pagingMap); //조회
    	int likeCount = likeService.likeCount(memberId); // 좋아요 수 조회(표시하려고)
    	
    	// 총 게시글 수 계산, 기본값 설정
    	int totalArticles = 0;
    	if (myhomeMap.get("totalArticles") != null) {
    	    totalArticles = (int) myhomeMap.get("totalArticles");
    	}
    	// 총 페이지 수 계산
    	int totalPages = (int) Math.ceil((double) totalArticles / pageSize); 

    	ModelAndView mav = new ModelAndView("/mypage/myhome/myPageMyHomeList");
    	mav.addObject("myhomeMap", myhomeMap); // "myhomeMap"라는 이름으로 JSP에 전달
    	mav.addObject("likeCount", likeCount); //좋아요수(게시글에서 표시하려고)
    	mav.addObject("section", section);
    	mav.addObject("memberId", memberId);
    	mav.addObject("totalPages", totalPages); // 총페이지수 값을 추가
    	 
    	return mav;
    }
}
  1. 서비스
package com.spring.gami.mypage.myhome.service;

@Service("myPageMyhomeService")
@Transactional(propagation = Propagation.REQUIRED)
//트랜잭셔널
public class MyPageMyhomeServiceImpl implements MyPageMyhomeService {

	@Autowired
	private MyPageMyhomeDAO myPageMyhomeDAO;
	@Autowired
	private MyhomeDomain myhomeDomain;
	@Autowired
	private MyPageMyhomeDomain myPageMyhomeDomain; //이것도

	@Override
	public Map<String, Object> listArticles(Map<String, Object> pagingMap) throws Exception {
		Map<String, Object> articlesMap = new HashMap();

		List<MyPageMyhomeDomain> articlesList = myPageMyhomeDAO.selectMyArticlesList(pagingMap); //게시글목록

		String memberId = (String) pagingMap.get("memberId");
		
		int totalArticles = myPageMyhomeDAO.selectTotArticle(memberId); //전체 게시글 수 count

		articlesMap.put("articlesList", articlesList);
		articlesMap.put("totalArticles", totalArticles);
		
		return articlesMap;
	}
}
  1. DAO
package com.spring.gami.mypage.myhome.dao;

@Repository("myPageMyhomeDAO")
public class MyPageMyhomeDAOImpl implements MyPageMyhomeDAO {
	
	 	@Autowired
	    private SqlSession sqlSession;
	    @Autowired
	    private MyhomeDomain myhomeDomain;

		@Override  //게시글
		public List<MyPageMyhomeDomain> selectMyArticlesList(Map<String, Object> pagingMap)  throws DataAccessException {
			List<MyPageMyhomeDomain> articlesList = sqlSession.selectList("mapper.myBoard.selectMyArticlesList", pagingMap);
			return articlesList;
		}
		@Override  //페이지 수 count
		public int selectTotArticle(String memberId)  throws DataAccessException {
			int totArticles = sqlSession.selectOne("mapper.myBoard.selectTotArticle", memberId);
			return totArticles;
		}
}