본문 바로가기
개발자로 가는 길(국비지원과정)/4.Spring+ Ajax

[210715목] 게시판 글조회 해시맵과 동적쿼리, 페이징

by 레아Leah 2021. 7. 15.
반응형

<ArrayList와 HashMap의 차이> 

:  ArrayList와 HashMap은 같다고 생각해도 무방하다. ArrayList는 index가 pk, HashMap은 키값이 pk라고 생각하면 good! 

 

하지만 HashMap은 순서가 없고, 중복이 불가하다는 점이다. 키값의 중복이 없기때문에 키값으로 원하는 값을 쉽게 찾을 수 있다. ArrayList 안에는 vo 혹은 HashMap과 같은 컬렉션도 넣을 수 있는데 이것은 관리하기 편하도록 하는 것이다. 

 

 

 

게시판을 눌렀을 때 주소창 변화 

 

게시판에서 조회시 

게시판을 눌렀을 때와 조회시 가장 큰 다른 점은

리스트보드 뒤의 값이다. 

 

http://localhost:8089/board/ get 방식 주소 표시줄에 나와있기 때문에

위의 것은 게시판을 요청한 것 

아래의 것은 searchItem과 serchWord의 값을 가지고 조회하는 것 

 

보기만 하세요 출력이 잘되는 지 로거를 통해!! 

 

 

 

첫화면에서는 전달된 것이 없기 때문에 null

이후에는 값이 전달되었기때문에 값이 나온다. 

 

서버쪽으로 들어갈때 name이 변수명가 된다.

 

이런 경우 null poitnt 오류 발생하기때문에! 

 

searchItem, searchWord가 있든 없든 아래 코드인 selesctAll을 수행함 이때 오류발생 가능성 

 

널인지 판단하는 코드가 있지만  spring에는 기능이 따로 있음! 

 

 

if(searchItem == null) searchItem ="title";
if(searchWord == null) searchWord ="title";

 

 

@RequestMapping("/listboard")
public String listboard(
@RequestParam(value="searchItem", defaultValue ="title")  String searchItem
, @RequestParam(value="searchWord", defaultValue="")  String searchWord
, Model model) 

 

archItem"가 비어있을 경우 default 값을 설정해주는 것 그래서 널 포인터 이셉션은 피해갈 수 있다. 

 

selectAll() 전달인자로 searchItem과 searchWord로 넣어주고 형태도 변환

 

두개를 넣어보내는 것은 어렵기 떄문에 map을 이용하는 것이 좋다.

mapper도 바꿔줘야함 전달인자가 있는 것으로 그래야 디비까지 정보가 감 

 

 

%를 넣어줘야함

 

default 값을 넣어놓아서 검색이 없이 전체를 가져올 때 사용하는 쿼리문은 사용하지 않는다.

 

이것을 바꿔줄 것이다. 

 

동적쿼리를 사용할 것이다. 

제공해주는 choose는 switch~case와 동일하다. 

 

<choose>

    <when> 

 </choose>

 

 

 

 

[2교시]

 

잘 돌아가는지 확인

 

검색한 내용이 출력 후에도 검색되도록 

 

아무것도 검색하지 않으면 쿼리문이 이렇게 되고 

 '%%' 표시는 전체를 검색하는 것이다. 

 

 

레퍼런스

<select>

<option> 선택한 값을 계속 창에 띄우기 위해서 설정! 

 

 

[페이징] : 그룹화시키는 것! 

ex) 1페이지에 10개의 글이 보이게 하기 위해! 

페이징을 하는 이유는 스크롤해서 내려가지 않고 싶기 때문이다. 

 

페이징도 되면서 검색기능을 갖추도록 만들기 

 

몇몇 아이디로 로그인해서! 내용이 비슷하게 글을 쓰기(데이터 만들어 놓기) 최소 21개 이상 

 

페이징을 하고 싶다면 어떻게 할 것인지 생각해보기 

1) 한 페이지에 몇 개씩 구성할 것인지 생각하기 10개씩 

2) 전체 글 개수를 알아야 한다. 

select count(*) from board; 

더보기

select count(*) from board
where 
    userid LIKE '%' || '회원가입' || '%';

 

글 개수를 얻어오는 쿼리문이 있는지 매퍼에서 찾아보기 

 

검색과 동시에 페이징을 하기위해 파라미터! 

 

리스트에 접근하자마자 글 개수를 알고 있어야 한다.

여기서 요청하자마자 바로 필요하다. 

{} 중괄호가 없으면 값을 넣지 못한다.

 

 Map은 bean에서 제공하지 않기 때문에 만들어줘야함 

 

 

글 개수 및 특정 아이디로 확인 

 

확인

 

화면에 뿌리기 위해 model에 넣기 

 

view에 가서 totalRecordCount(글 개수)가 뜨는지 확인! 

 

<페이징 계산식 만들어 보기>

EX)

1) 전체 글개수(totalRecordCount) : 152개 

2) 한 페이지(countPerPage) : 10개  ==> 페이지수: 16페이지 

 

1 2 3 4 5 6 ,,,,16까지 나와야 한다. 

이걸 또 그룹으로 나눈다. 

 

3) 페이지 그룹(pagePerGroup) : 5p를 하나의 그룹으로 ==> 그룹수 : 4개 

 

int countPerPage = 10; finally 값이라 고치면 안된다. 

int srow = ?? 

int erow = ?? 

 

srow는 시작 

erwo는 끝 

 

 

0그룹 :  1, 2, ,3, 4, 5

1:  1~10 srow, erow

2:  11~20

3:  21~30

4:  31~ 40

5:  41~50

 

1그룹: 6,7,8,9,10 

,,,

16: 151~(마지막글)152 

 

 

4) 사용자가 요청한 페이지 : currentPage 

currentPage가 변해도 srow, erow를 읿반화해 문제없이 돌아가게! 

반응형