Backend/Spring

스프링 게시판 - 페이징(paging) 처리하기 (2)

:_: 2021. 8. 3. 11:19

 

게시판 페이징(paging) 처리하기 (1) 에서는 jsp, js 에 관련된 코드 정리하였고
(2) 에서는 나머지 코드를 정리하여고 한다.

 

3. Controller.java

@RequestMapping(value = "/getMyBoardList.ajax", method = RequestMethod.POST, produces="text/plain;charset=UTF-8")
@ResponseBody
public String getMyBoardList(HttpServletRequest request, HttpServletResponse response, Model model,
  @RequestParam(value = "mainParams", required = false, defaultValue = "{}") String mainParams
  ) throws Exception {

  String decodeResult = URLDecoder.decode(XssPreventer.unescape(mainParams), "UTF-8");

  Map<String, Object> searchParams = (new Gson()).fromJson(decodeResult, Map.class);
  Map<String, Object> result = new HashMap<String, Object>();

  int pagesize = getPagesize(searchParams);
  int pageno = getPageNo(searchParams);

  searchParams.put("startRownum", ((pageno - 1) * pagesize));
  searchParams.put("pagesize", pagesize);

  List<Board> lists = myBoardService.getMyBoardList(searchParams);
  int totalCnt = myBoardService.getMyBoardListTotalCnt(searchParams);

  result.put("lists", lists);
  result.put("totalCnt", totalCnt);

  return (new Gson()).toJson(result);
}

→ js에서 파라미터로 보낸 pageNo, pagesize를 조회할 때 사용하도록

   startRownum, pagesize 를 계산하여 searchParams에 넣어서 보냄

→   startRownum : pageNo 가 1일때 startRownum은 0 , pageNo 가 2일때 startRownum은 5 

     쿼리 조회시 limit 을 사용했는데 시작점으로 들어감(첫번째 파라미터가 0부터 시작)

→ pagesize  : 게시물을 몇 개를 가져올지

 

4. Service.java

public List<Board> getMyBoardList(Map<String, Object> searchParams) {
  try {    		
  	return myBoardDao.getMyBoardList(searchParams);
  } catch(Exception e) {
  	e.printStackTrace();
  	return null;
  }
}

 

5. Dao.java

public List<Board> getBoardList(Map<String, Object> searchParams) throws Exception {
	return getSqlSessionTemplate().selectList("myboard.getBoardList", searchParams);
}

 

6. sql.xml

<select id="getBoardList" parameterType="java.util.Map" resultType="com.mayday.mufun.model.Board">
  select 
  	@num:=@num+1 AS rn, numno, boardno, title, contents, vieword, regdate, viewcnt, memberno, membername, boardname, depth, groupno, answerstatus
  from(
    select 
    	t1.numno, t1.boardno, t1.title, t1.contents, t1.vieword, 
        DATE_FORMAT(t1.regdate,'%Y-%m-%d') regdate, t1.viewcnt, t1.memberno, 
        t2.membername, t1.depth, t1.groupno, t1.answerstatus
    from tb_board t1
    inner join tb_member t2 ON t1.memberno = t2.memberno
    where t1.memberno = #{memberno}
    and t1.groupno = t1.numno
    order by t1.regdate desc
    )as tt1, (select @num:=0) R
  <if test='pageNo > 0'>
  limit ${startRownum}, ${pagesize}
  </if>
</select>

 

 

  • 한 페이지당 5개의 게시글을 볼 수 있도록 설정

페이징을 적용한 게시판

 

 

728x90