티스토리 뷰

아래의 query로 읽으면 된다.

리스트 전체를가져와 1부터 번호(idx)를 매기고, idx를 조건으로 가져오는 방법. 

select * from 
	(select row_number() over (order by idx)as sn, * from table ) data 
where sn between #{start_sn} and #{last_sn}

 

sql.xml파일.

<sql id="paging_s">select * from (select row_number() over</sql>
<sql id="paging_e">) data where sn between #{start_sn} and #{last_sn}</sql>

<select id="list" parameterType="java.util.HashMap" resultType="java.util.HashMap">
	<include refid="paging_s" /> (order by idx)as sn, * 
	from table
	<include refid="paging_e"/>
</select>

페이징처리도 하지만 동일한 리스트를 엑셀파일로 다운받는 경우,

부분출력 또는 전체 출력도 해야하기 때문에 

start_sn과 last_sn을 따로 입력해 줘야 한다.

ex) 2~4페이지를 가져오는 경우 start_sn = 16, last_sn = 45

ex) 전체를 가져오는경우 start_sn = 1, last_sn = 전체컬럼수

    또는 () 바깥의 select와 where절을 생략

 


단순히 한페이지씩 페이징하는 경우

<sql id="paging_s">select * from (select row_number() over</sql>
<sql id="paging_e">) data where sn between 15*(#{page}-1)+1 and 15*#{page}</sql>

 이렇게 하면 선택한 페이지번호만 파라미터로 넘겨주어도 된다


(order by idx) 

이 부분도 나같은 경우 order by 뒤의 컬럼이 1개라는 보장이 없기 때문에 따로 입력하지만,

그렇지 않은 경우 

<sql id="paging_s">select * from (select row_number() over(order by ${column}) as sn,</sql>

까지 입력해 주어도 된다.

 


스크립트는 

//page : 선택한 페이지 번호
//페이징 단위 15개
var start_sn = 15*(page-1) + 1;	
var last_sn = 15*page;

두개의 변수를 파라미터에 넣고 호출하면 1~15, 16~30, ... 으로 호출된다.

 

 

 

 

 


db호출 시에 페이징을 하는 경우, 

select하는 컬럼 수가 많으면 딜레이가 발생하는것 같아서 스크립트에서 페이징처리를 할 수 있도록 했는데, 

딜레이도 없고 잘 돌아간다...

 

그런데 찾아보니 스크립트에서 리스트전체를 가지고 페이징하는 경우가 적더라..

무슨 이유일까?? 

//$scope.tmpList: 처음 db에서 읽어온 전체 리스트
//$scope.lists : 화면에 보여지는 리스트
$scope.paging = function(page){
    var start = 15*(page-1);
    var done = (15 * page)-1;
    
    $scope.lists =[];	
    for(var i=start; i<=done; i++){
        $scope.lists.push($scope.tmpList[i]);
    }
}

 

<table>
	<tr ng-repeat="(key, rows) in lists">
    	<td>{{value.sn}}</td>
        <td>{{value.content}}</td>
    </tr>
</table>

전체 리스트 중 

0~14, 15~16, ... 개의 값을 출력하는 변수에 옮겨준다.

 

 

'spring memo' 카테고리의 다른 글

web spinner  (0) 2019.11.15
angular - ajax  (0) 2019.11.15
[javascript] image resize  (0) 2019.10.24
input에 전화번호 하이픈(-)넣기  (1) 2019.10.24
nodejs 비동기 문제  (0) 2019.10.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함