
북마크 추가, 삭재 다이어그램.drawio
BookMarkController
// 북마크 추가
@RequestMapping(value = "/bookMark.do", method = {RequestMethod.GET, RequestMethod.POST})
public String bookMark(@RequestParam("boardMyhomeArticleNo") int boardMyhomeArticleNo,
HttpSession session) throws Exception {
System.out.println("북마크 확인 : " + boardMyhomeArticleNo);
// 세션에서 아이디 가져오기
if((MemberDomain) session.getAttribute("member") != null) {
MemberDomain memberDomain = (MemberDomain) session.getAttribute("member");
String memberId = memberDomain.getMemberId();
// no는 북마크 추가,삭제 작업, yes는 리스트 조회할때 북마크 여부만 가져오기
String check = "no";
// 북마크 여부 확인하여 추가 삭제
bookMarkService.isBookmark(boardMyhomeArticleNo, memberId, check);
// 북마크 숫자를 세션에 담기
int bookMarkTotal = bookMarkService.selectTotArticle(memberId);
session.setAttribute("bookMarkTotal", bookMarkTotal);
}
return "redirect:/board/board_myhome/myHomeSelect.do?boardMyhomeArticleNo=" + boardMyhomeArticleNo;
}
BookMarkServiceImpl
// 북마크
@Override
public String isBookmark(int boardMyhomeArticleNo, String memberId, String check) throws Exception {
Map<String, Object> bookCheck = new HashMap<>();
bookCheck.put("boardMyhomeArticleNo", boardMyhomeArticleNo);
bookCheck.put("memberId", memberId);
String isBookMark = bookMarkDAO.isBookmark(bookCheck);
System.out.println("isBookMark : " + isBookMark);
if(check.equals("no")) {
if(isBookMark.equals("nobook")) {
addBookmark(bookCheck);
}else {
deleteBookmark(bookCheck);}
}
return isBookMark;
}
// 북마크 삭제
private void deleteBookmark(Map<String, Object> bookCheck) {
bookMarkDAO.deleteBookmark(bookCheck);
}
// 북마크 추가
private void addBookmark(Map<String, Object> bookCheck) {
bookMarkDAO.addBookmark(bookCheck);
}
BookMarkDAO
// 북마크 삭제
@Override
public void deleteBookmark(Map<String, Object> bookCheck) throws DataAccessException {
sqlSession.delete("mapper.bookMark.deleteBookmark", bookCheck);
}
// 북마크 추가
@Override
public void addBookmark(Map<String, Object> bookCheck) throws DataAccessException {
sqlSession.update("mapper.bookMark.addBookmark", bookCheck);
}
// 북마크 체크
@Override
public String isBookmark(Map<String, Object> bookCheck) throws DataAccessException {
return sqlSession.selectOne("mapper.bookMark.isBookmark", bookCheck);
}
bookMark.xml
<!-- 북마크 추가 -->
<insert id="addBookmark" parameterType="Map">
INSERT INTO bookMark (articleNo, memberId)
VALUES (#{boardMyhomeArticleNo}, #{memberId})
</insert>
<!-- 북마크 삭제 -->
<delete id="deleteBookmark" parameterType="Map">
DELETE FROM bookMark
WHERE articleNo = #{boardMyhomeArticleNo} AND memberId = #{memberId}
</delete>
<!-- 북마크 체크 -->
<select id="isBookmark" parameterType="Map" resultType="String">
<![CDATA[
SELECT CASE
WHEN EXISTS (SELECT 0 FROM bookmark WHERE articleNo=#{boardMyhomeArticleNo} and memberId = #{memberId})
THEN 'book'
ELSE 'nobook'
END
FROM dual
]]>
</select>
myHomeSelect.jsp
/* 북마크 추가 */
function bookMark(button, event) {
event.preventDefault();
var bookMark = $(button).closest('form');
var contextPath = `${contextPath}`;
// 로그인 여부 확인
if (isLogOn == 'true' && isLogOn != null) {
var boardMyhomeArticleNo = $("#bookMarkArticleNo").val();
$.ajax({
url: "/gami/mypage/bookmark/bookMark.do",
type: 'POST',
data: {
boardMyhomeArticleNo: boardMyhomeArticleNo
},
success: function() {
location.reload();
},
error: function(status) {
}
});
} else {
// 비로그인 시 로그인 페이지로 이동 여부 묻고 확인 누르면 이동
if (confirm("로그인 후에 이용이 가능합니다. 로그인 페이지로 이동하시겠습니까?")) {
window.location.href = contextPath + '/member/loginForm.do';
}
}
}