본문 바로가기

SPRING

스프링레거시 글목록에 좋아요갯수 표시하기

 

 

처음엔 깊게 생각하지않고

글디테일에서 뿌려줬던것처럼 똑같은 방법으로 좋아요갯수를뿌려주면 되겠거니 했다

저렇게 냅다 카운트뿌려벌임 ㅎ 

근데 안나오는것이다..

 

 

		 <input type="hidden" name="bannedUserNo" value="${board.userNo}">
		    <input type="hidden" name="bannedUserNick" value="${board.userNick}">
		    <input type="hidden" name="userNo" value="${loginUser.userNo}">
		    <input id="countLike" type="hidden"  value="${countLike}" name="countLike" >
		</td>      	


    
          <td class="views">${board.readCount}</td>
          <td class="heart">${countLike}</td>

boardlist뿌려주는 부분의 일부 jsp

 

 

 

 

 

근데 곰곰히 생각해보니....그도 그럴것이..

글목록은 보드리스트로 뿌리는건데 

아무리 좋아요객체를 만들어서 뿌린다한들...보드리스트에서는 보이지않는것이다...

그럼 어떻게 하지..?

생각하면서 구글링해보니...

너무나 쉬운방법이 있었다.

그냥 보드리스트 뿌리는 매퍼부분에  서브쿼리를 추가해주면 되는것이였다.

 

하지만...........이상하게 서브쿼리로 하려고했는데 아무리 수정을 해봐도 각 글의 좋아요갯수를 보여주지 못했다....

결국 다른 방법을 선택해야했다.

 

생각해보니 보드테이블을 만들때 boardLike라는 칼럼을 만들었었지 참.....

그걸 이용해보는게 좋을거같다는 생각이 들었다.

보드테이블을 이용해서 보드리스트를 뿌리는방법을 쓰고있기때문에 

굳이 서브쿼리를 이용해서 한번 더 복잡하게 데이터를 조회하느니

차라리 보드테이블에 있는 boardLike컬럼을 이용해서 뿌려주는게 데이터복잡도도 그렇고 실용성이 좋아보였다.

 

그러면 어떻게 해야할까?

 

난 이미 boardLike라는 테이블이 따로 있다.

이곳에서 좋아요들을 각각 관리하려고 만들었었다.

좋아요버튼을 클릭하면 그 데이터가 이곳으로 저장되는것이다.

 

그러면....?

 

결국 매퍼에 board의 boardLike컬럼에도 좋아요클릭시 1씩 플러스되거나 마이너스되도록 업데이트 구문을 추가하는방법을 써야하는것이였다.

서브쿼리로 머리아픈것보다 오히려 이 방법이 쉽고 간편했다.

 

 

 

 

그냥 매퍼에 업데이트 구문을 두개 만들어준다.

하나는

좋아요클릭시 같이 연결할 1씩 플러스되는 쿼리와

나머지 하나는 좋아요를 취소할시 1씩 마이너스 되는 쿼리.

	<!--보드테이블에 좋아요 갯수 추가-->
	<update id="boardLikePlus"  parameterType="board">
		UPDATE BOARD SET BOARD_LIKE = BOARD_LIKE + 1  WHERE BOARD_NO = #{boardNo}
	</update>
	
		<!--보드테이블에 좋아요 갯수 빼기-->
	<update id="boardLikeMinus"  parameterType="board">
		UPDATE BOARD SET BOARD_LIKE = BOARD_LIKE - 1  WHERE BOARD_NO = #{boardNo}
	</update>

 

 

그러고나서 굳이 컨트롤러에서 또다시 작업할 필요도 없이

각각의 dao부분에서  if문을 이용하여 연결시켜주고 

 

 

 


	public int addLike(BoardLikeVO likeVo) {
		
		
		int addLike = sqlSession.insert("boardMapper.addLike", likeVo);
		

		if(addLike > 0) {
		
		sqlSession.update("boardMapper.boardLikePlus",likeVo.getBoardNo());
		      return addLike;
		 
		 } else {
		    	
			 return -1;
		 
		 }
	}

 

 

public int removeLike(BoardLikeVO likeVo) {
		
		
		int removeLike = 	sqlSession.delete("boardMapper.removeLike", likeVo);
		

		if(removeLike > 0) {
			 
		sqlSession.update("boardMapper.boardLikeMinus",likeVo.getBoardNo());
			return removeLike;
			
		} else {
		    	
		    return -1;
		}
	}

 

 

 

 

 <td class="heart">${board.boardLike}</td>

 

보드리스트jsp에서 선언해주면 아주 잘 반영되는걸 볼수가 있다!