페이징 처리하는 매퍼를 어떻게 작성해야 하나요?

페이징 처리하는 매퍼를 어떻게 작성해야 하나요?

QA

페이징 처리하는 매퍼를 어떻게 작성해야 하나요?

본문


<select id="findAll" resultType="fbvo" parameterType="pgvo">
SELECT *
FROM (
SELECT A.*, ROWNUM AS RN
FROM (
SELECT *
FROM freeboard
ORDER BY fb_num DESC
) A
WHERE ROWNUM <= #{page_num * page_size + 1} -- Calculate the upper limit
)
WHERE RN >= #{(page_num - 1) * page_size} -- Calculate the lower limit
</select>

 

제가 페이징 처리하는 마이바티스 매퍼를 만들고 있는데 오라클 문법이 잘못되었는데

어떻게 수정해야 할지 모르겠습니다. 어떻게 수정해야 할까요?

이 질문에 댓글 쓰기 :

답변 3

https://mybatis.org/mybatis-3/ko/sqlmap-xml.html

과 몇몇 참고 페이지를 둘러본 결과

 

표현식 관련 파라미터는 찾아볼수 없었고

주석은 한줄 주석 대신 /* ... */ 또는 <!-- ... --> 으로 사용해야 한다는 것과

부등호 관련해서는 XML 이기 때문에 <, > 심볼을 사용할수 없고 엔티티변환 또는 CDATA 블록으로 처리해 줘야 하는것 같습니다.

 

따라서 다음처럼 시도해볼수 있을것 같습니다.

 

1. CDATA


<select id="findAll" resultType="fbvo" parameterType="pgvo">
<![CDATA[
SELECT *
FROM (
    SELECT A.*, ROWNUM AS RN
    FROM (
        SELECT *
        FROM freeboard
        ORDER BY fb_num DESC
    ) A
    WHERE ROWNUM <= #{page_num} * #{page_size} + 1 /* Calculate the upper limit */
)
WHERE RN >= (#{page_num} - 1) * #{page_size} /* Calculate the lower limit */
]]>
</select>
 

 

2. Entity


<select id="findAll" resultType="fbvo" parameterType="pgvo">
SELECT *
FROM (
    SELECT A.*, ROWNUM AS RN
    FROM (
        SELECT *
        FROM freeboard
        ORDER BY fb_num DESC
    ) A
    WHERE ROWNUM &lt;= #{page_num} * #{page_size} + 1 <!-- Calculate the upper limit -->
)
WHERE RN &gt;= (#{page_num} - 1) * #{page_size} <!-- Calculate the lower limit -->
</select>

<select id=“findAll” resultType=“fbvo” parameterType=“pgvo”>

SELECT * FROM freeboard ORDER BY fb_num DESC LIMIT #{page_size} OFFSET #{(page_num - 1) * page_size}

</select>

네 그럼요^
LIMIT과 OFFSET 절은 SQL 표준에 따라 작성되므로 다른 데이터베이스와도 호환이 잘됩니다.
그러나 ROWNUM은 오라클에만 특화된 문법이므로 다른 데이터베이스와 호환되지 않습니다

답변을 작성하시기 전에 로그인 해주세요.
전체 722
QA 내용 검색
filter #sql ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT