[Spring] 페이징처리 / 검색기능 구현 흐름
페이징 처리는 아래와 같은 단계로 진행하면 좋다.
1. URI 문자열을 조절해서 원하는 페이지의 데이터가 출력되도록 하는 단계
2. 목록페이지 하단에 페이지 번호를 보여주고 클릭하면 페이지가 이동하는 단계
3. 목록페이지에서 조회나 수정작업을 한 후 다시 원래 목록페이지로 이동할 수 있게 처리하는 단계
1. URI 문자열을 조절해서 원하는 페이지의 데이터가 출력되도록 하는 단계
리스트가 노출되는 URI에 get 방식의 인자를 전달한다. (board?page=1)
자바빈으로 컨트롤러에서 클라이언트가 보낸 파라미터를 수집
클라이언트가 보낸 파라미터를 가진 객체를 Service 메소드의 파라미터로 포워드
DAO에선 (정확히 말하면 mapper에선) 쿼리 내 변수명과 같은 자바빈의 멤버를 파싱
페이징 처리는 각 링크에 현재 페이지 번호와 perPageNum등 현재 상태 정보를 가진 객체를 서버로 같이 보낸다. 서버로 전달 된 파라미터들은 스프링 프레임워크의 수집 기능에 의해 분석되고 각 파라미터들은 서버에 전달되는 데이터로 탈바꿈한다.
1. URI 문자열을 조절해서 원하는 페이지의 데이터가 출력되도록 하는 단계
2. 목록페이지 하단에 페이지 번호를 보여주고 클릭하면 페이지가 이동하는 단계
3. 목록페이지에서 조회나 수정작업을 한 후 다시 원래 목록페이지로 이동할 수 있게 처리하는 단계
1. URI 문자열을 조절해서 원하는 페이지의 데이터가 출력되도록 하는 단계
리스트가 노출되는 URI에 get 방식의 인자를 전달한다. (board?page=1)
자바빈으로 컨트롤러에서 클라이언트가 보낸 파라미터를 수집
클라이언트가 보낸 파라미터를 가진 객체를 Service 메소드의 파라미터로 포워드
DAO에선 (정확히 말하면 mapper에선) 쿼리 내 변수명과 같은 자바빈의 멤버를 파싱
페이징 처리는 각 링크에 현재 페이지 번호와 perPageNum등 현재 상태 정보를 가진 객체를 서버로 같이 보낸다. 서버로 전달 된 파라미터들은 스프링 프레임워크의 수집 기능에 의해 분석되고 각 파라미터들은 서버에 전달되는 데이터로 탈바꿈한다.
- DAO, MyBatis xmlMapper, DAOImpl을 통해 페이징 처리 SQL문을 작성해둔다
- 조회할 게시물의 번호 / 게시물 확인 전에 탐색 중이던 페이지 번호 / 페이지 당 노출하는 게시물 수 - 클라이언트(웹)에서는 위 내용(페이지, 페이지번호, 페이지당 게시물 수)을 서버로 원하는 방식대로 보낼 수 있다 (Form태그 내 hidden Input / Javascript / get방식으로 URL에 포함)
- 서버에서는 이 내용들을 각각 받기보단, 하나의 클래스를 정의하고 그 클래스 안에 클라이언트(웹이) 보낸 정보들을 멤버로 정의해둔다 - 이 때 주의할 점은 xmlMapper에 정의해놓은 SQL문이 수집하는 파라미터명과 클래스 멤버의 이름이 동일해야 한다는 것이다.
- xmlMapper에서 #{page}라는 가변 파라미터를 정의해두었다면, 반드시 클래스 안에 멤버 속성 이름은 반드시 page이어야 한다는 뜻.
- 게시판 글 목록에서 글 상세정보를 보기 위해 상세보기를 할 때 링크가 변하게 되는데, 보통은 이 때 글번호만 전달하므로 서버에서 현재 페이지 번호와 페이지 당 글 목록 수를 같이 전달해야 한다.
- Bean항목으로 클라이언트 사이드에서 보내기 어려운 파라미터들은 스프링의 utility인 uriComponents로 처리한다. 서버에서 해당 라이브러리를 불러오고 queryParam에 각각 page / perPageNum을 클라이언트로 같이 return 해주면 웹(클라이언트)에서 Bean처럼 꺼낼 수 있다.
검색기능 처리
- Criteria를 확장하여 검색어명/검색 데이터 타입도 Bean에 포함한다.
- 특정한 검색 결과만을 나타낼 경우 검색결과만을 포함한 결과가 페이징 되어야 하기 때문에 기존에 작업해놓은 페이징 처리를 수정해야한다.
- DB에 다녀와야 하는 데이터이기 때문에 자연스럽게 DAO -> XML Mapper -> DAOImpl이다.
- XML Mapper에는 동적 SQL쿼리를 추가한다. (SQL문 내에 if, choose등의 명령어를 사용하여 각 상황에 맞는 Query를 의미한다 - 검색어나 검색타입에 맞게 SQL문이 변경 되도록)
댓글
댓글 쓰기