Loading...

Spring/Tistory / / 2022. 4. 27. 00:43

블로그-V3. 스칼라 서브 쿼리로 구현한 JPA Pageable

반응형

X정리X

 

SELECT COUNT(*) FROM post WHERE userId = 1;

Integer mTotalPages( );

 

size = 3;

totalPages = 2; = ceil(전체개수 5라면 / 3)

 

SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1;

 

사이즈 = 3 (상수)

현재 페이지 = 사용자입력 (변수)

전체 페이지 = (사이즈), (전체 게시글 수)

 

스칼라 서브쿼리 (결과가 한건)

 

 

SELECT 
3 size, 
0 currentPage,
(SELECT COUNT(*) FROM post WHERE userId = 1) totalCount, 
(SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1) totalPages,
p.*
FROM post p
ORDER BY p.id DESC
LIMIT 0*3, 3;

 

db에서 1이 나오면 true, 0은 false

 

SQL처럼 데이터만 다루는 언어를 DSL(Domain Specific Language)이라고 한다.

데이터를 다루는데 특화된 언어인 것이다.

 

토탈 페이지가 2이고

현재 페이지가 0일 때

-- 변수 선언(실행시에 메모리에 띄움)
SET @currentPage = 0;

SELECT 
if(@currentPage=0, TRUE, FALSE) FIRST,
if(@currentPage=(SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1)-1, TRUE, FALSE) LAST,
3 size, 
0 currentPage,
(SELECT COUNT(*) FROM post WHERE userId = 1) totalCount, 
(SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1) totalPages,
p.*
FROM post p
ORDER BY p.id DESC
LIMIT 0, 3; -- LIMIT (0*3), 3;

 

토탈 페이지가 2이고

현재 페이지가 1일 때

 

* 페이지넘버는 첫번째 페이지가 0이라서 2번째 페이지 넘버가 1이다.

토탈 페이지에 -1 해줘야 정상적으로 돌아간다.

 

-- 변수 선언(실행시에 메모리에 띄움)
SET @currentPage = 1;

SELECT 
if(@currentPage=0, TRUE, FALSE) FIRST,
if(@currentPage=(SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1)-1, TRUE, FALSE) LAST,
3 size, 
0 currentPage,
(SELECT COUNT(*) FROM post WHERE userId = 1) totalCount, 
(SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1) totalPages,
p.*
FROM post p
ORDER BY p.id DESC
LIMIT 0, 3; -- LIMIT (0*3), 3;

 

쿼리를 직접 만드면 자바 오브젝트에 매핑하는게 귀찮다..

 

 

 

머스태치에서 값을 뿌릴 때 안에 키값이 없을 때 뿌리는 법

{{.}}

바로 값이 찍힌다

반응형