페이징 처리하는 매퍼를 어떻게 작성해야 하나요?
본문
<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 <= #{page_num} * #{page_size} + 1 <!-- Calculate the upper limit -->
)
WHERE RN >= (#{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>
https://sanaulla.info/2022/02/09/using-rownum-to-paginate-the-data-in-oracle/?amp=1
https://stackoverflow.com/questions/27099414/how-to-add-offset-in-a-select-query-in-oracle-11g
오라클에서 페이징 SQL 참고하세요.
답변을 작성하시기 전에 로그인 해주세요.