티스토리 뷰
[데이터베이스/SQL] - [SQL] DBMS 종류에 따른 페이징 쿼리(분할 쿼리)
지난 포스팅에 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"/>
간단하게 공통적으로 페이징이 되는 방법이다. 필요에 따라, 테이블 조인, 조건, 정렬까지 얼마든지 활용가능하다.
'데이터베이스 > SQL' 카테고리의 다른 글
[SQL] 디자인의 3가지 관계 유형 (0) | 2021.01.27 |
---|---|
[SQL] MySQL 엔진, 데이터베이스, 테이블 용량 확인 (0) | 2021.01.26 |
[SQL] WHERE 1=1 의미 (0) | 2021.01.20 |
[SQL] MySQL SYSDATE() NOW() 차이 (0) | 2021.01.20 |
[SQL] MySQL 하위에서 상위 찾기 (WITH RECURSIVE) (0) | 2021.01.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- 리액트
- javascript
- 오라클
- 정렬 알고리즘
- Linux 명령어
- 회고
- 프로그래머
- Java
- 자바스크립트
- 리액트 16
- 리눅스 명령어
- 제주도 3박4일 일정
- Collection
- Eclipse
- Tomcat
- spring
- Maven
- 이직
- 프로그래머스
- 자바
- 제주도 여행
- React
- effective java
- sort algorithm
- 성능분석
- 개발환경
- 경력관리
- 오라클 내장 함수
- 소프트웨어공학
- SQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함