테스트 사이트 - 개발 중인 베타 버전입니다

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

toto1234 2년 전 조회 4,344

</p>

<p><select id="findAll" resultType="fbvo" parameterType="pgvo"></p>

<p>SELECT *</p>

<p>FROM (</p>

<p>SELECT A.*, ROWNUM AS RN</p>

<p>FROM (</p>

<p>SELECT *</p>

<p>FROM freeboard</p>

<p>ORDER BY fb_num DESC</p>

<p>) A</p>

<p>WHERE ROWNUM <= #{page_num * page_size + 1} -- Calculate the upper limit</p>

<p>)</p>

<p>WHERE RN >= #{(page_num - 1) * page_size} -- Calculate the lower limit</p>

<p></select></p>

<p>

 

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

댓글을 작성하려면 로그인이 필요합니다.

웅푸
2년 전

<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>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

엑스엠엘
2년 전
오라클에서 limit가 이제는 지원 되나요?
웅프
2년 전
네 그럼요^
LIMIT과 OFFSET 절은 SQL 표준에 따라 작성되므로 다른 데이터베이스와도 호환이 잘됩니다.
그러나 ROWNUM은 오라클에만 특화된 문법이므로 다른 데이터베이스와 호환되지 않습니다
엑스엠엘
2년 전
Oracle 12c부터 지원 되나 보네요
웅프
2년 전
네 맞습니다.

댓글을 작성하려면 로그인이 필요합니다.

2년 전

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

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

 

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

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

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

 

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

 

1. CDATA

</p>

<p><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>

 </p>

<p>

 

2. Entity

</p>

<p><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 &amp;lt;= #{page_num} * #{page_size} + 1 <!-- Calculate the upper limit -->

)

WHERE RN &amp;gt;= (#{page_num} - 1) * #{page_size} <!-- Calculate the lower limit -->

</select></p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인