티스토리 뷰

 

[데이터베이스/SQL] - [SQL] DBMS 종류에 따른 페이징 쿼리(분할 쿼리)

 

[SQL] DBMS 종류에 따른 페이징 쿼리(분할 쿼리)

TEMP 테이블 DBMS 종류에 따른 분할 쿼리 방식은 조금씩 다르다. 페이징을 하거나, 데이터를 끊어 읽을 때 사용된다. Oracle 변수 처리 시 start, end로 데이터를 제한하여 분할하면 된다. ex) WHERE TOTAL.RNU

reference-m1.tistory.com

지난 포스팅에 DBMS 종류별 페이징을 소개 한적이 있었다. 목록성 화면에서 페이징이 있는 경우 많이 사용하는 방법이다.

오늘은 위에 소개한 쿼리를 Mybatis를 활용하여 공통적으로 적용하는 방법이다. 아래의 예시는 MySQL로 작성되었다.

 

CommonMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="common">
    <sql id="prevPage">
    SELECT @ROWNUM:=@ROWNUM+1 AS RNUM
         , PAGE.*
      FROM (
    </sql>
    
    <sql id="rownumPage">
    , ( SELECT @ROWNUM := 0 ) R
    </sql>

    <sql id="postPage">
           ) PAGE
     ORDER BY RNUM DESC
     LIMIT #{startIndex}, #{recordsPerPage}
    </sql>
    
    <sql id="limitPage">
      LIMIT #{startIndex}, #{recordsPerPage}
    </sql>
</mapper>

CommonMapper에서 namespace를 정의하여 페이징이 있는 모든xml에 사용될 페이징 쿼리 구조를 정의한다.

  • prevPage
  • rownnumPage
  • postPage

limitPage는 RNUM(정렬순서)이 필요 없을고 페이징만 있는 화면에서 단독으로 쓰인다.

 

UserMapper.xml

<include refid="common.prevPage"/>
SELECT A.USER_ID
     , A.USER_NM
     , A.EMAIL_ADDR
     , B.COM_CD_NM AS USER_ATHO_CD_CM
  FROM USER_BAS A
  LEFT OUTER JOIN COM_CD B
    ON A.USER_ATHO_CD = B.COM_CD
   AND B.DEL_YN = 'N'
<include refid="common.rownumPage"/>
 WHERE A.SECSN_YN = 'N' 
   AND A.DEL_YN = 'N'
 ORDER BY A.FRST_REG_DATE ASC
<include refid="common.postPage"/>

간단하게 공통적으로 페이징이 되는 방법이다. 필요에 따라, 테이블 조인, 조건, 정렬까지 얼마든지 활용가능하다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함