06-11 Spring

Ruinak·2021년 6월 11일
0

Spring Lesson

목록 보기
7/23
post-custom-banner

오라클에서 인덱스 관련

게시판 생성

  • BoardController의 list 메서드로 받은 List를 list.jsp에서 받아서 출력함
  • 작성일이 외국표기법으로 출력되므로 변경 예정

작성일의 출력을 yyyy.MM.dd로 변경

  • fmt 접두사가 있어야 fmt로 시작하는 태그들을 사용할 수 있음
  • formatDate의 value는 Date 객체를 가짐
  • formatDate의 pattern는 출력 방식을 설정함(yyyy.MM.dd hh시 mm분 ss초)
    - 년/월/일 로 할때 . 이나 - 이나 상관 없음
    - 월은 대문자 M 사용, 분이 소문자 m

인덱스 설정

  • 기존의 설정된 primary key 인덱스
  • 최신글일수록 번호가 클것이므로 내림차순 정렬, 주글은 오름차순 정렬!
  • 주글 밑에 답글, 답글에 답글의 방식으로 사용 예정
  • 코드 실행 후 계획 설명을 눌러서 보면 인덱스가 어떻게 작동했는지, 어떤 인덱스가 사용되었는지를 볼 수 있음
  • 인덱스를 거쳐서 검색을 하는게 풀 스택보다 훨씬 빠름
  • ORDER BY는 과부하를 일으키므로 INDEX를 활용하는게 좋음

게시판 페이징 쿼리

  • WHERE 조건절에서 직접 언급하는 방식
  • RANGE SCAN은 범위를 좁혀서 검색을 했다는 의미
  • 범위 주석에 +를 붙이면 + 다음에 인덱스를 사용해서 SELECT를 해달라는 의미
  • 범위 주석에 +를 붙이면 주석으로 작동하지 않지만, 컬럼처럼 취급되지도 않음
  • WHERE절을 사용해서 지정해줘야 작동함
  • 범위지정 출력도 작동 잘 됨
  • ROWNUM이 기본적으로 FROM 다음 WHERE 절에서 가져올 행이 선택될 때 최초로 1번이 매겨짐
  • 여기서 또 최초로 1번이 매겨지지만 찾는 번호가 1이 아니라면 해당하지 않아 폐기됨
  • 실행 순서가 레드 박스 안에서 실행이 된 후 바깥 구문 실행!
  • 레드박스 안에서 1~20까지 번호를 매긴 후 바깥 구문을 통해 11~20을 출력함
  • ORDER BY를 쓰지 않는것이 포인트!

10씩 끊어서 페이징하는 코드추가

  • 페이지 번호와 글 개수를 관리하는 클래스 Criteria를 com.example.domain에 생성
  • Criteria는 페이지 번호와 한 페이지당 글 개수를 지정함
  • BoardMapper.java에 추상 메서드 getListWithPageing추가
  • BoardMapper.xml에 코드 추가
  • BoardService에 getList
  • 기존의 getBoards 대신 getList를 사용
  • 게시판 확인, 10개씩 출력됨
  • 주소의 pageNum에 따라 게시글의 번호가 맞게 출력됨

주소창에 list?pageNum=2&amount=10 이렇게 쳐서 들어갈 수 있는게 컨트롤러 때문인게 맞나요?

네 맞아요~

PageDTO 작성

  • com.example.domain에 페이지를 만들 때 기준 정보를 담을 PageDTO를 생성
  • endPage는 getPageNum을 실수로 나눈 후 Math.ceil로 올림 시켜서 int로 정수화시킨 후 5를 곱한다.
  • ceil은 소수점 첫째자리에서 올림함
  • statrPage는 구한 endPage에서 5(우린 5개씩 볼 예정)에서 1을 뺀 값을 뺀다.
  • 실제 끝 페이지 값인 realEnd 선언

BoardController 수정

  • 전체 글 가져오기 위해 사용했던 getBoards 대신 정확한 getList로 변경
  • pageDTO 인스턴스 생성
  • pageMaker와 pageDTO 사용

boardList.jsp 수정

  • totalCount를 pageMaker.total로 변환
  • Pagination 코드를 수정함
  • Pagination 코드의 prev, next 이벤트 설정
profile
Nil Desperandum <절대 절망하지 마라>
post-custom-banner

0개의 댓글