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

황제낙엽 2007.02.26 18:34 조회 수 : 534 추천: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로 가능한 방법은 더 찾아봐야 될거 같습니다.
 

번호 제목 글쓴이 날짜 조회 수
50 XpressEngine(XE) 에서 엮인글 스팸 방지법 file 황제낙엽 2017.08.25 633
» [Hibernate] 페이징 처리 정리 황제낙엽 2007.02.26 534
48 [Hibernate] Hibernate 프레임워크를 이용한 효율적인 개발 전략 황제낙엽 2007.01.30 480
47 XStream 배우기 : 별칭(Alias) 배우기 황제낙엽 2011.04.20 438
46 JSTL과 Velocity를 활용한 UI 레이어 구현 방법 황제낙엽 2007.01.30 428
45 XStream 배우기 : 변환기(Converter) 배우기 황제낙엽 2011.04.20 402
44 Map <-> XML (2) 황제낙엽 2011.04.29 392
43 부트스트랩 4 와 5 버전 차이를 알려줘 (from ChatGPT) 황제낙엽 2023.02.24 318
42 Custom XStream Converter 황제낙엽 2011.04.26 310
41 [Hibernate] Hibernate Tutorial 황제낙엽 2012.11.15 280
40 Vanilla JS Datepicker 에서 locales 지정 (한국어로 출력) 황제낙엽 2023.06.19 249
39 [Hibernate] Hibernate 와 Ant 에서 composite id 사용하기 예제 file 황제낙엽 2005.11.29 249
38 검색엔진 루씬 Lucene... Analyzer의 선택 황제낙엽 2007.11.27 212
37 [Hibernate] 하이버네이트 참조문서 버전 3.2 cr3의 최신 업데이트 한글 번역본 file 황제낙엽 2007.07.03 200
36 XE 서버 이전 계획 file 황제낙엽 2018.08.29 189
35 벨로시티에서 loop 작성 황제낙엽 2005.12.13 188
34 Chatbot 용 디자인 템플릿 (ChatGPT) file 황제낙엽 2024.01.28 166
33 XML -> (Map) XML 황제낙엽 2011.04.29 159
32 Bootstrap 5 Gallery Examples & Freebies 황제낙엽 2023.09.26 158
31 Jakarta Lucene (루씬) - 들어가기 황제낙엽 2007.07.30 149