[ETC] [Hibernate] 페이징 처리 정리

황제낙엽 2007.02.26 18:34 조회 수 : 457 추천:119

site_link1 http://blog.naver.com/zeon77?Redirect=Lo...0027898151 
site_link2  
site_link3  

  [ 타입1 ]

Query 인터페이스는 페이징 처리를 위한 메소드를 제공하고 있는데, 이 두 메소드는 아래와 같이 사용한다.

 

Query query = session.createQuery("from Member member order by member.name asc"); 
query.setFirstResult(30); 
query.setMaxResults(15); 

Query.setFirstResult() 메소드는 Query의 결과 목록 중에서 읽어올 첫번째 항목의 인덱스값을 입력한다. 이때 인덱스 값은 0부터 시작한다. 따라서, 위 코드는 31번째 항목부터 읽어오게 된다.
setMaxResults() 메소드는 읽어올 최대 개수를 나타낸다. 따라서, 위 코드는 Query 결과의 31번째 항목부터 최대 15개를 읽어오게 된다. 이 두 메소드를 사용하면 페이징 처리를 쉽게 할 수 있을 것이다.
다음과 같은 메서드를 기본적은 구현하여 사용할 수 있습니다.

 

 

·미리보기 | 소스복사·
 
  1. /**  
  2.  * page : 처리를 페이지  
  3.  * range : 화면 당 보여줄 리스트의 갯수  
  4.  */  
  5. protected List  getPagedList(String queryName, int page, int range) throws Exception {   
  6.   Session session = SessionManager.currentSession();   
  7.   /** queryName : 매핑되어 있는 퀴리의 이름명 */  
  8.   Query query = session.getNamedQuery(queryName);   
  9.   /**  (page-1) * range : 설정된 값+1 부터 처리를 시작됨에 유의하자.  */  
  10.   query.setFirstResult((page-1) * range);   
  11.    /** range : 처리하여 가져올 항목의 갯수를 설정하는 부분 */  
  12.   query.setMaxResults(range);   
  13.      
  14.    return query.list();   
  15.  }  

 

 

 



 [ 타입2 ]
보통 SQL을 처리할 때 데이터가 많아질 경우 요구사항이 발생하는 것은 당연합니다.
Hibernate에서도 이와 같은 고민을 해결하기 위해서 다음과 같은 방법을 제시하고 있습니다.

 

 

 

·미리보기 | 소스복사·
 
  1. Query q = s.createFilter( collection, "" );      // the trivial filter   
  2. q.setMaxResults(PAGE_SIZE);   
  3. q.setFirstResult(PAGE_SIZE * pageNumber);   
  4. List page = q.list();  

즉, 먼저 쿼리를 실행한 다음 해당 해당 Collection 데이터를 Filter를 통해서 필요한 데이터만큼만 가져오도록 처리할 수 있다고 Hibernate 문서에서 제시하고 있네요.
지금 이 방법이 정말 쿼리를 실행할 때 특정 부분만 가져오는 것인지 아니면 님이 말한것처럼 모든 데이터를 가져온 다음 특정부분만 가져오도록 구현되고 있는지는 확인해봐야 될거 같습니다.
Hibernate를 사용하면서 발생하는 문제점 해결을 위한 유용한 Tip을 모아 놓은 http://www.hibernate.org/118.html 보시면 도움 많이 되실거 같습니다.
HQL로 가능한 방법은 더 찾아봐야 될거 같습니다.
 

번호 제목 글쓴이 날짜 조회 수
47 XpressEngine(XE) 에서 엮인글 스팸 방지법 file 황제낙엽 2017.08.25 461
» [Hibernate] 페이징 처리 정리 황제낙엽 2007.02.26 457
45 [Hibernate] Hibernate 프레임워크를 이용한 효율적인 개발 전략 황제낙엽 2007.01.30 389
44 XStream 배우기 : 별칭(Alias) 배우기 황제낙엽 2011.04.20 340
43 JSTL과 Velocity를 활용한 UI 레이어 구현 방법 황제낙엽 2007.01.30 339
42 XStream 배우기 : 변환기(Converter) 배우기 황제낙엽 2011.04.20 298
41 Custom XStream Converter 황제낙엽 2011.04.26 212
40 [Hibernate] Hibernate Tutorial 황제낙엽 2012.11.15 166
39 [Hibernate] Hibernate 와 Ant 에서 composite id 사용하기 예제 file 황제낙엽 2005.11.29 134
38 검색엔진 루씬 Lucene... Analyzer의 선택 황제낙엽 2007.11.27 102
37 Map <-> XML (2) 황제낙엽 2011.04.29 99
36 [Hibernate] 하이버네이트 참조문서 버전 3.2 cr3의 최신 업데이트 한글 번역본 file 황제낙엽 2007.07.03 98
35 벨로시티에서 loop 작성 황제낙엽 2005.12.13 85
34 XE 서버 이전 계획 file 황제낙엽 2018.08.29 80
33 SiteMesh를 이용하여 웹 페이지의 레이아웃을 처리 황제낙엽 2007.08.13 67
32 XML -> (Map) XML 황제낙엽 2011.04.29 61
31 Jakarta Lucene (루씬) - 들어가기 황제낙엽 2007.07.30 57
30 Xdoclet 사용하기 1부 황제낙엽 2006.10.04 45
29 XStream 배우기 : 2분만에 배우는 XStream 황제낙엽 2011.04.20 40
28 Xdoclet 사용하기 2부 황제낙엽 2006.10.04 40