2013-09-04 2 views
0

프런트 엔드에서 지연로드 및 페이지 매김을 구현하려고합니다. 나는 프론트 엔드에 의해 다음과 같은 두 가지 변수를 제공했습니다 : 첫 번째 행 및 페이지 크기로 레코드 선택

  • firstRow

    은 - 첫 번째 레코드의 인덱스 선택 쿼리의 결과에 반환 할 수 있습니다.
  • pageSize - firstRow부터 시작하는 선택 쿼리에서 반환해야하는 레코드의 총 크기입니다.

레코드의 원하는 하위 집합을 반환하려면 MyBatis의 선택 쿼리에서 어떻게 사용할 수 있습니까?

+0

원칙은 JPA/Hibernate /와 동일합니다. MyBatis가 'first'로 시작하고'pageSize'의 크기를 갖는 레코드의 서브 세트를 정확하게 리턴하는 SQL 질의를 실행하게합니다.이 레코드는'LazyDataModel # load()'메소드에서 인자로 제공됩니다. 그게 다야. 이 문제는 JSF/PrimeFaces 측에서 가장 분명하지 않습니다. JSF/PrimeFaces 잡음 (MyBatis 사용자에게는 관련성이없고 잠재적으로 혼란 스러울 수 있음)을 생략하고 MyBatis에서 'LIMIT' /'OFFSET' SQL 쿼리를 수행하는 방법을 다시 묻는 질문에 첫 번째 변수를 포함하는 두 개의 변수 색인 및 결과 크기 – BalusC

+0

@BalusC 감사합니다. 제 질문을 편집했습니다. 게으른 로딩으로 인해 처음으로 얼굴을 보았 기 때문에 아무 것도 모르고 mybatis로 실제 구현을 찾을 수 없었습니다 (아직, 적어도) . 계속 찾고있을 것입니다. – Teor

+0

여전히 좋지 않습니다. 나는 당신의 질문을 다시 정리했다. – BalusC

답변

0

mybatis에서 페이지 매김에 대한 마법은 실제로 쿼리를 작성한 다음 행 번호를 사용하여 부분 집합으로 만듭니다. 페이지 매김 구문은 데이터베이스에 따라 다르지만 여기에는 Oracle 예제가 있습니다.

select * 
from (
    select r.*, rownum rnum, 
    from (# base query goes here #) r 
) 
where rnum >= (#{firstRow}) 
and rnum < #{firstRow} + #{pageSize} 
+0

나는 순간에이를 사용하고 있지만, 꽤 느린 BETWEEN \t \t, 당신은 당신의 쿼리가 더 효율적이라고 생각합니까 MyRow? – Teor

+0

그들은 본질적으로 동일한 것입니다. 명시 적으로 정렬 된 파티션에 대해 row_number 함수를 사용하고 있습니다. 나는 오라클의 rownum pseudo 칼럼을 사용하여 옵티마이 저가 동일한 실행 계획을 야기하는 정렬과 윈도우를 어떻게 구현하는지 결정하도록하고있다. – Brian