페이징에 도전해 보자.

일단 어떻게 할지 생각해보면 다음과 같겠다.

1. 사용자 페이지에서는 원하는 페이징 번호를 누르면 페이징 번호는 파라미터로 컨트롤러에 전달될 것이다.

2. 전달된 파라미터에는 현재 페이지번호, 한 페이지당 출력되야할 게시물수, 한 블럭당 출력되어야 할 페이지수. 이렇게 기본 3가지 파라미터를 받아내야 한다. 사용자가 확실히 전달 해 줄 것을 가정해 본다. 여기에 덧붙여 검색부분에 대한 파라미터도 생각해서 추가해 볼 수 있겠다.

3. 컨트롤러는 전달받은 파라미터를 기반으로 얼만큼의 데이터셑을 들고 올지 어플단에서 계산한다. 이 계산된 값을 결국에 쿼리로 날릴 예정인데, 여기서는 iBATIS를 사용한다는 전제를 염두하고 iBATIS에서 지원하는 queryForList를 사용하겠다.

queryForList는 몇가지 메소드 형태를 띄는데, 그중에서 다음을 사용해 보도록 하면 좋겠다.
두번째 인자로 파라미터 오브젝트도 받는다고 하니 딱이지 싶다.
이를 위해서 2번항목에서 잠깐 잊고 있었던, 파라미터들을 아예 클래스로 묶어 버리자.
어차피, 이 파라미터들은 대부분 쓰임새가 비슷하므로 클래스 하나에 묶어도 괜찮지 않을까라는 생각이 든다. 이 녀석을 Parameters라는 클래스로 묶어보겠다.

queryForList

public List queryForList(String statementName,
Object parameterObject,
int skipResults,
int maxResults)
throws DataAccessException
Specified by:
queryForList in interface SqlMapClientOperations
Throws:
DataAccessException - in case of errors
See Also:
SqlMapExecutor.queryForList(String, Object, int, int)
<뜬금없는 생각 : queryForInt는 왜 없는거지? 너무 복잡해지려나?>

4. queryForList에서 리턴된 리스트는 이미 내가 원하는만큼의 데이터다. 하지만, 이건 셑만 가져왔으므로, 실제 리스트에서 보여질 페이징 구문도 함께 만들어줘야 한다. 이를 위해서는 전체 게시물의 사이즈를 알아와야 하므로, queryForObject로 값을 얻어와준다.

5. 이제 리스트를 보이는데 필요한 모든 요소를 다 갖추었다.
개인적으로 전부터 사용해왔던, 페이징 유틸을 이참에 스프링에서도 사용해 보면 좋겠다. 개선해야할 점은 몇 있지만, 로직은 고칠 필요가 없겠다.

이렇게 생각하고 나니 좀 정리가 된다.

그럼 실전으로 고고!!!
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기