댓글은 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는 서버에서 사용자에게 보낼때 데이터를 걸러주는 것이다.
'Spring' 카테고리의 다른 글
스프링 : AOP와 트랜잭션 (0) | 2021.11.02 |
---|---|
스프링 : UriComponentsBuilder 클래스 (0) | 2021.10.28 |
스프링 : 댓글 처리 (2) (0) | 2021.10.27 |
스프링 : 댓글 처리 (0) | 2021.10.26 |
스프링 : ResponseEntity, MediaType, consumes, produces (2) | 2021.10.22 |