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

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

  [ 타입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 Hello React 황제낙엽 2025.04.04 479
49 Bootstrap Icons 황제낙엽 2024.10.13 611
48 navbars 예제 황제낙엽 2024.07.15 589
47 Chatbot 용 디자인 템플릿 (ChatGPT) file 황제낙엽 2024.01.28 637
46 (Bing) Mustache 의 특징 황제낙엽 2023.12.21 587
45 문자열의 셀렉션 동작 구현 (<p>, <input>) 황제낙엽 2023.10.02 536
44 Bootstrap 5 Gallery Examples & Freebies 황제낙엽 2023.09.26 696
43 Small Business Template (Start Bootstrap) 황제낙엽 2023.09.25 626
42 Card Component 에 background image 출력하기 황제낙엽 2023.09.08 543
41 Bootstrap Gallery 를 상품 전시용으로 활용하기 위한 분석 황제낙엽 2023.09.06 578
40 dom element 에 collapse 적용하기 file 황제낙엽 2023.08.16 562
39 <i> 태그의 아이콘 종류 찾기 (fontawesome, icon) file 황제낙엽 2023.07.09 554
38 Vanilla JS Datepicker 에서 locales 지정 (한국어로 출력) 황제낙엽 2023.06.19 773
37 Feather-icons (svg) 황제낙엽 2023.06.10 532
36 프레임셋처럼 외부페이지를 동적으로 로드하기 (from bing) 황제낙엽 2023.05.24 578
35 Modal 컴포넌트를 스크립트로 감추고 보이기 황제낙엽 2023.05.22 574
34 bootstrap free date-picker 종류 (from bing) 황제낙엽 2023.05.20 566
33 라디오 버튼을 선택 해제하는 샘플 코드 (from bing) 황제낙엽 2023.05.16 558
32 radio group 에서 아이템을 선택한 값 가져오기 황제낙엽 2023.05.15 531
31 부트스트랩(Bootstrap) 테마(Theme), 템플릿(Template) 무료 사이트 file 황제낙엽 2023.04.05 562