ํ์ด์ง ์ฒ๋ฆฌํ๊ธฐ
์น ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ผ๋ฉด, ๋ฐ์ดํฐ ์ฆ๊ฐ๋ก ์ธํด ํ์ด์ง ์ฒ๋ฆฌ์ ๋ํ ๊ณ ๋ฏผ์ ํ์ง ์์ ์ ์๋ค.
ํน์ ํ ๊ฐ์๋งํผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ฑ๋ ๋์ ๋ฟ๋๋ฌ ์ด์ ๋ฐ๋ฅธ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ ์๋ ์๋ค.(์ ์ ๋ฐ์ดํฐ ํธ์ถ๋ก ์ธํ ํผํฌ๋จผ์ค ํฅ์)
๊ณ ์ ์ ์ธ ํ์ด์ง ์ฒ๋ฆฌ
legacy ํ๋ก์ ํธ๋ฅผ ๋ณด๋ค๋ณด๋ฉด ๊ฐ Controller ๋๋ Service์์ page ์ ๋ํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด๋์๋ค.
//legacy ํ๋ก์ ํธ์์ ๋์ ์ค์ด๋ ํ์ด์ง ํธ์ถ Fun
final int boardSize = 10; // ํ ํ์ด์ง์ ๊ฒ์๊ธ ์ถ๋ ฅ ๊ฐ์
String pageNumber = request.getParameter("pageNumber");
if (pageNumber == null) {
pageNumber = "1";
}
int startRow = (pageNumber - 1) * boardSize + 1;
int endRow = pageNumber * boardSize;
//LogAspect.logger.info(LogAspect.logMsg + " ํ์ด์ง๋ฒํธ : " + pageNumber + ",์์๋ฒํธ : " + startRow + ",๋๋ฒํธ : " + endRow);
// ๊ฒ์ ์คํํธ
int count = boardDao.getBoardCount(searchType,searchData,sDate,eDate,company_seq,progress_status,ptn_comp_seq); // ์ ์ฒด ์นด์ดํธ
LogAspect.logger.info(LogAspect.logMsg + " ๋ฆฌ์คํธ ๊ฐ์ : " + count);
int real_count = 0;
List<BoardDto> boardList = null;
if (count > 0) {
endRow = 10;
boardList = boardDao.boardList(startRow,endRow,searchType,searchData,sDate,eDate,company_seq,progress_status,ptn_comp_seq);
LogAspect.logger.info(LogAspect.logMsg + " boardList ๊ฒฐ๊ณผ ๊ฐ : " + boardList.size() + "\n");
mav.addObject("boardListSize",boardList.size());
...
}
mav.addObject("count",count); //์ ์ฒด ๊ฑด์
mav.addObject("boardSize",boardSize); // ํ ํ์ด์ง์ ๊ฒ์๊ธ ์ถ๋ ฅ ๊ฐ์
mav.addObject("pageNumber",currentPage); //ํ์ฌ ํ์ด์ง
legacy project ไธญ
์ ์ญ ์ค์ ์ ๋ํ ๊ณ ๋ฏผ
ํ์ด์ง ์ฒ๋ฆฌ๋ ํ ๊ณณ์์๋ง ์ฐ์ด๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ '์ฌํ์ฉ์ด ๊ฐ๋ฅ'ํด์ผํ๋ ๊ฒ์ ๋ชฉํ๋ฅผ ๋์๋ค.
๋ฌผ๋ก Controller ๋ Service ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก Util ํด๋์ค๋ฅผ ๋์ด ๋ณ๋๋ก ๊ตฌํํด๋ ์ ๋ชฉํ์ ์ ํฉํ์ง๋ง, Spring ์์๋ ์ธํฐ์
ํฐ(Interceptor) ๋ผ๋ ๋์์ด ์์ด ์ด๋ฅผ ํ์ฉํด์ ์ฒ๋ฆฌํ๊ธฐ๋ก ํ๋ค.
Page Helper
์ด ๊ธ์์๋ com.github.pagehelper ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
maven dependency
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
๋จ์ ํ
์คํธ ์งํ
@Test
void paging(){
int pageSize = 10; //NOTE: ํ์ด์ง ๋น ๊ฐ์
PageHelper.startPage(1, pageSize); //DESC: 1 ํ์ด์ง์ 10๊ฐ
Page<UserVO> p = (Page<UserVO>) groupMapper.userList();
log.info("์ ์ฒด ๋ฐ์ดํฐ: {}", p.getTotal());
log.info("์ ์ฒด ํ์ด์ง: {}", p.getPages());
log.info("ํ์ฌ ํ์ด์ง: {}", p.getPageNum());
}
๊ฒฐ๊ณผ ๊ฐ์์ ๋ณด๋ฏ ์ ์ฒด์ ๋ํ ๋ฐ์ดํฐ ๊ฐฏ์์ ํ๋ผ๋ฏธํฐ์ ๋ฐ๋ฅธ ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
(Page Helper ์์ ์ฟผ๋ฆฌ ๋ด LIMIT ๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ์ , ์ ์ฒด ์ฟผ๋ฆฌ์ count๋ฅผ ์กฐํํด ์ ์ฒด ํ์ด์ง ์ ๋ณด์ ๋ณด์ฌ์ค ํ์ด์ง๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์)
์ ์ฝ๋ ์คํ ์ ์งํ๋๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
-- ์ ์ฒด ๊ฐฏ์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ๋ค.
Connection.prepareStatement:
SELECT count(0)
FROM TB_USER
-- ํ์ด์ง์ ํด๋นํ๋ ์๋ฃ๋ฅผ ์กฐํํ๋ค. (setInt์ ๊ฐ์ ์ฃผ์ด์ง ์ด๊ธฐ๊ฐ์ ๋ฐ๋ผ ๊ณ์ฐํด์ ์ ์ฉ)
PreparedStatement.setInt(1, 10):
SELECT TG.GROUP_NAME AS GROUPNAME
FROM TB_USER
ORDER BY TU.REG_DATE DESC
LIMIT 10 //setInt ๋ ๋ด์ฉ์ ์ด ๊ณณ์ ์ ์ฉ๋๋ค.