벨라12
176
2021-06-07 01:55:26 작성 2021-06-07 02:33:40 수정됨
10
244

댓글 수 가져오는 방법 문의드립니다. 0이라고 나와서요


게시판 리스트의 제목 옆에 댓글 수 나타내게 하는걸 할려고 하는데,

꾸역꾸역 하루 종일 매달려서 표시는 되는데, 0이라고 표시됩니다. replycount(댓글 수)  가 db에는 0이 아닌데도요;;부탁드립니다.


boardcontroller

@GetMapping("/board/list")  // 게시판 목록 출력
public ModelAndView list(ModelAndView mv, String cp, String bno) {
mv.setViewName("board/list.tiles");
mv.addObject("bds", bsrv.readBoard(cp));
mv.addObject("bdcnt", bsrv.countBoard()); //총 게시 글수
   mv.addObject("bds", bsrv.rpCount(bno)); //댓글수

return mv;

service

BoardVO rpCount(String bno);

serviceImple

@Override
public BoardVO rpCount(String bno) {
return bdao.selectReplyCount(bno);
}

DAO

BoardVO selectReplyCount(String bno);

DAOImple

@Override
public BoardVO selectReplyCount(String bno) {
return sqlSession.selectOne("board.selectRpCount", bno);
}

Mapper

<select id="selectRpCount" statementType="PREPARED"
resultType="int">
SELECT bno, title, (SELECT COUNT(*) FROM Reply where Reply.bno=Board.bno) replycount
FROM Board
ORDER BY bno desc;
</select>
0
  • 답변 10

  • 프레드윰
    580
    2021-06-07 02:42:49

    별칭을 줘서 한번 해보세요 구분이 제대로 안된거 일수도?

  • 벨라12
    176
    2021-06-07 03:03:03
    replycount

    이렇게 주는거요?? 이게 별칭 주는 거라 나오던데..

  • 로를리앙
    218
    2021-06-07 03:10:47 작성 2021-06-07 03:12:26 수정됨

    쿼리바꾸시면되지않을까요...

    리절트타입이 인트면 .. 맵형태로 리턴이 되는지 모르겟네요?

    그게아니면 원래쿼리대로 가져올라면

    리절트타입을 hashmap으로 리턴받으셔서 화면에 뿌리셔도되고..

    <select id="selectRpCount" statementType="PREPARED"
    resultType="int">
    SELECT COUNT(*) FROM Reply where Reply.bno=Board.bno
    </select>
  • 벨라12
    176
    2021-06-07 03:54:31

    /로를리앙님

    리절트타입을 String이나 hashmap으로 하면 Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 404 오류가 뜨네요;;


    그리고, Mapper에서 replycount

    이렇게 별칭 주면 Board 테이블에 replycount 필드를 생성할 필요 없는 건가요??

  • richard7
    1k
    2021-06-07 05:45:19
    사용한 매소드는 selectOne이어서 결과가 하나여야 하는데
    쿼리 실행 결과가 2개 이상의 row여서 나오는 오류네요
    select로 해보세여
  • 벨라12
    176
    2021-06-07 11:48:10

    selectOne으로 하면 쿼리 오류가 뜨네요??

    어렵네요;;;;

  • 상저씨
    170
    2021-06-07 13:57:06

    parameter를 넘기시는데 paramter를 where절에서 안쓰시니 selectOne으로 하시면 여러개가 나와서 안되는 거구요.


    VO로 받으시려면 resultType="패키지명.BoardVO" 으로 선언하세요

  • 뉴비디벨
    91
    2021-06-07 16:51:56 작성 2021-06-07 17:16:50 수정됨

    1. DAO 리턴타입이 BoardVO로 되어있고 Mapper 부분에는  resultType이 int로 돼있는 게 수상하네요.

    댓글수만 추출하실건지 댓글수 외 게시판 정보들도 추출하실 건지 생각해보셔야할듯요


    2. DAO에 파라메터로 받으신 bno를 사용해서 해당 게시물의 정보를 가져오시려는 의도 같으신데 Mapper에서는 사용안하셔도 괜찮나요?


    그리고 궁금해서 그런데 Mapper 부분 Select안의 서브쿼리 사용하신 거 where 절에 Board.bno가 불러와 지나요?

    쿼리만 실행해보실때 데이터 결과는 원하시는대로 불러오는지 궁금하네요

  • 벨라12
    176
    2021-06-07 22:24:56

    /일본에서첫걸음 님

    아직도 모르는게 너무 많네요,,,말씀하신 1, 2번 관련 곰곰히 생각해 볼께요,,

    지금 답글을 봐서.... 좀 쉬다 새벽에 일어나서 해야 할거 같네요;;

    마지막에 질문은...원하는 대로는 아니고요,,댓글과 대댓글의 합으로 나오더군요,,댓글 수만 구해야 하는데..이것도 아직 해결 할려고 열심히 찾고 있었는데,,,에휴..

    /상저씨 님

    안녕하세요 VO로 받는 거라,,, resultType="패키지명.BoardVO"으로 해보겠습니다...


    모든 답변에 감사드립니다.

     

  • 벨라12
    176
    2021-06-09 01:08:12

    mapper에 resultType에 대해 조금이나마 알게 되었네요.

    문제 해결 했습니다. 감사합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.