북마크 목록 다이어그램.drawio.png

북마크 목록 다이어그램.drawio

BookMarkController

// 목록 조회
	@RequestMapping(value = "/bookMarkList.do", method = RequestMethod.GET)
	public ModelAndView myBookMarkList(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		MemberDomain memberDomain = (MemberDomain) session.getAttribute("member");
    	String memberId = memberDomain.getMemberId();
    	
    	// 북마크 숫자를 세션에 담기
  	  	int bookMarkTotal =  bookMarkService.selectTotArticle(memberId);
  	  	session.setAttribute("bookMarkTotal", bookMarkTotal);
		
    	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 = 9; //한페이지에 보여줄 게시글수
    	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 = bookMarkService.selectBookMarkList(pagingMap); // 게시글 조회
        
        // 총 게시글 수 계산, 기본값 설정
    	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/bookmark/bookMarkList");
        mav.addObject("myhomeMap", myhomeMap); // "myhomeMap"라는 이름으로 데이터를 JSP로 전달
        mav.addObject("section", section);
        mav.addObject("memberId", memberId);
        mav.addObject("totalPages", totalPages); // 총페이지수 값을 추가
        
        return mav;
	}

BookMarkServiceImpl

	// 목록 조회
	@Override
	public Map<String, Object> selectBookMarkList(Map<String, Object> pagingMap) throws Exception {
		

		Map<String, Object> articlesMap = new HashMap<>();
		List<MyhomeDomain> articlesList = bookMarkDAO.selectBookMarkList(pagingMap); //게시글목록
		
		String memberId = (String) pagingMap.get("memberId");
		int totalArticles = selectTotArticle(memberId); // 전체 게시글 수 count

		
		articlesMap.put("articlesList", articlesList);
		articlesMap.put("totalArticles", totalArticles);

		return articlesMap;
	}

	// 북마크 선택 삭제
	@Override
	public void deleteMyBookMarkList(Map<String, Object> deleteBookMark) throws Exception {
		bookMarkDAO.deleteMyBookMarkList(deleteBookMark);
	}
	
	// 북마크 삭제
	private void deleteBookmark(Map<String, Object> bookCheck) {
		bookMarkDAO.deleteBookmark(bookCheck);
	}
	
	// 북마크 추가
	private void addBookmark(Map<String, Object> bookCheck) {
		bookMarkDAO.addBookmark(bookCheck);
	}

BookMarkDAOImpl

 // 목록 조회
	@Override
	public List<MyhomeDomain> selectBookMarkList(Map<String, Object> pagingMap) throws DataAccessException {
		List<MyhomeDomain> myhomeList = sqlSession.selectList("mapper.bookMark.selectBookMarkList", pagingMap);
		return myhomeList;
	}
	
	// 총 글 수
	@Override
	public int selectTotArticle(String memberId)  throws DataAccessException {
	return sqlSession.selectOne("mapper.bookMark.selectTotArticle", memberId);
	}

bookMark.xml

 <!-- 북마크 리스트 조회 -->
    <select id="selectBookMarkList" resultMap="MyBookMarkResultMap" parameterType="String">
        <![CDATA[
	    SELECT * FROM (
        SELECT b.*, i.imageFilename, ROWNUM as rnum
        FROM (
            SELECT * 
            FROM boardMyhome 
            WHERE boardMyhomeArticleNo IN (
                SELECT articleNo 
                FROM bookmark 
                WHERE memberId = #{memberId}
            )
            ORDER BY boardMyhomeUpdated DESC
        ) b
        LEFT JOIN image
        ON b.boardMyhomeArticleNo = i.articleNo 
        AND i.imageType = '커버'
        WHERE ROWNUM <= #{endRow}  
    ) 
    WHERE rnum >= #{startRow}
        ]]>
    </select>
    
<!-- 해당 아이디에 있는 북마크 수 -->
<select id="selectTotArticle" resultType="int" parameterType="String">
	<![CDATA[
		select count(articleNo)
		from bookmark
		where memberId= #{memberId}
	]]>
</select>

bookMarkList.jsp(페이징)

<!-- 페이지네이션 -->
<c:if test="${not empty totalPages}">
    <div class="pagination">
        <c:forEach var="i" begin="1" end="${totalPages}" step="1">
            <a href="?pageNum=${i}">${i}</a>
        </c:forEach>
    </div>
</c:if>