
북마크 목록 다이어그램.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>