댓글은 bno(게시글 번호)값과 rno(댓글 번호)값이 있다.

 

근데 만약 원하는 댓글들에서 내림차순으로 설정하면 중간에 다른 게시물의 번호들을 건너 뛰어가면서 특정 게시물을 

 

찾아야 하므로 효율이 줄어든다.

 

데이터가 많아지면 성능에 문제가 생길 수 있음.

 

인덱스를 새로 생성하는 것이 좋다.

 

create index idx_reply on tbl_reply (bno desc, rno asc);

 

index를 생성하고, 이름은 index_reply 그리고 tbl_reply의 bno desc는 게시글은 최근글 부터 나오니 내림차순으로 만들

 

어주고 rno는 옛날에 적은 댓글이 위에 올라오기 때문에 asc로 만들어준다.

 

<select id="getListWithPaging" resultType="com.sh.domain.ReplyVO">
	<![CDATA[
		select rno, bno, reply, replyer, replyBoom, replyDate, updatedate
		from
		(
			select /*+INDEX(tbl_reply idex_reply)*/
				rownum rn, rno, bno, reply, replyer, replyBoom, replyDate, updatedate
			from tbl_reply
			where bno = #{bno}
			and rno > 0
			and rownum <= #{cri.pageNum} * #{cri.amount}
		) 
		where rn > (#{cri.pageNum} -1) * #{cri.amount}
	]]>
	<!-- 1페이지의 내용 보여줄려면 1,2,3,4 해서 안에는 rownum의 숫자가 10보다 작아야함 그래서 밖에 -1 -->
</select>

	@GetMapping(value = "/pages/{bno}/{page}",
			produces = {
					MediaType.APPLICATION_XML_VALUE,
					MediaType.APPLICATION_JSON_UTF8_VALUE})
	public ResponseEntity<ReplyPageDTO> getList(
			@PathVariable("page") int page,
			@PathVariable("bno") Long bno){
		log.info("getList.........");
		
		Criteria cri = new Criteria(page,10);
		log.info(cri);
		return new ResponseEntity<>(service.getListPage(cri, bno),HttpStatus.OK);
	}

핸들러에서 처리할 미디이 타입을 선언할 수 있다.

 

consumes로 요청을 처리할 미디어 형식을 미리 저장한다.

 

그러면 httpHeader 중 ContentType을 읽어 일치하는 요청만 처리해준다.

그럼 지금 나와있는 XML_VALUE 와 JSON_UTF8_VALUE 요청을 받는다

 

ResponseEntity는 사용자의 httpRequest에 대한 응답 데이터를 포함하는 클래스이다.

그래서 이것을 응답으로 

service.getListPage 서비스에 들어가서 보내 준다.

 

반대로 produces는 서버에서 사용자에게 보낼때 데이터를 걸러주는 것이다.

+ Recent posts